TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #279 2.62K
📊 Рабочий лайфхак: собираем данные по частям или как я победила ошибку ClickHouse с помощью chunk-загрузки

На днях пришлось доставать статистику по списку страниц из ClickHouse. Встретилась с проблемой — из-за длинного условия в WHERE по большому списку база выдавала ошибку лимита запроса.🙅

Что придумала:
🍀 Разбила список страниц на части
🍀 Для каждой части сделала отдельный запрос с OR-условиями
🍀 Всё соединила через pd.concat — получилась единая таблица

Я уже показывала как искать по множеству URL в SQL. Теперь автоматизируем и это.
У нас есть большой список URL-адресов (например, из Excel-файла), и нам нужно найти все посещения этих страниц в нашей базе данных.
Берем тестовые данные и список интересующих нас блогов (как будто вы это выгрузили из excel файлика, который вам прислали коллеги)
В этот раз возьмем для наглядности 4 url, чтобы "красиво" разбить их на две части (по два url в каждой)
blogs_df = pd.DataFrame({'blog_path': ['blog/101', 'blog/102', 'blog/201','blog/103']


И запихнем все в цирккл конечно!
chunk_size = 2
loc_list = blogs_df['blog_path'].tolist()
results = []

for i in range(0, len(loc_list), chunk_size):
chunk = loc_list[i:i + chunk_size]
print()
print('chunk - это вот что:', chunk) # посмотрим на эти части

chunk_condition = " OR ".join([f"page_url LIKE '%{path}%'" for path in chunk])

print('запихнули части в like:', chunk_condition)

query = f"""
select page_url,
visitor_id,
visit_date
FROM visits_df
where {chunk_condition}
"""
chunk_result = sqldf(query)
results.append(chunk_result)
# Объединяем результаты из всех частей
final_result = pd.concat(results, ignore_index=True)


print выведет нам при первой итерации:
chunk - это вот что: ['blog/101', 'blog/102']
запихнули части в like: page_url LIKE '%blog/101%' OR page_url LIKE '%blog/102%'

при второй итерации:
chunk - это вот что: ['blog/201', 'blog/103']
запихнули части в like: page_url LIKE '%blog/201%' OR page_url LIKE '%blog/103%'

Ну и выведет финально то, что искали. Смотрим на сгенерированного человечка, пытливо ищущего ответы (радуемся картинке - мозг отдыхает), а потом пеереводим взгляд на вывод кода справа и немного напрягаем мозг 🤪.
  • ❤ 10
  • 👍 3
  • 😁 1
  • 🤪 1
  • 🆒 1
More from @analysts_world
  1. Sep 21, 2026📊 Задачка с собеседования Ну что, по итогам голосования большинство хотят задачки и sql.…
  2. Sep 14, 2026Post #345
  3. Sep 14, 2026Что-то я тут прям зачастила с A/B тестами 😅 Смотрю на последние посты и такое чувство, чт…
  4. Sep 1, 2026🎒 С 1 сентября, друзья! Сегодня как раз отправила своих детей в школу – и вот это чувство…
  5. Aug 24, 2026Вне выборки Обычно здесь про SQL, Python и AB-тесты. Но не всё, что важно, попадает в выбо…
  6. Aug 20, 2026Fuckup Night от создателей Trisigma, Ares и karpov.courses Согласитесь, ивенты, где все де…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →