Массивы вместо self-join: как писать быстрые запросы в ClickHouse

Привет, Хабр! Я — Максим Шитилов, продуктовый аналитик в каршеринг-сервисе Ситидрайв. Каждый день мы обрабатываем большие объёмы данных, и ClickHouse — один из наших ключевых инструментов. Если вы когда-либо пытались связать события с временными интервалами или рассчитать метрику за определённое окно после события, то наверняка сталкивались с типичной конструкцией на self-join. Вроде бы работает, но запрос становится громоздким, ресурсоёмким и плохо масштабируется. В этой статье я расскажу, как решать такие задачи проще и эффективнее — с помощью массивов, arrayFilter и arrayMap. Покажу, как отказаться от self-join’ов без потери точности, ускорить обработку и упростить код. Примеры — из реальных бизнес-кейсов: телеметрия, аренды, GMV и события, которые нужно связать между собой по времени. Так как схожих решений на просторах интернета я не нашёл, предлагаю назвать этот подход “Array Join Pattern”. Если метод окажется полезным для сообщества, то такой паттерн легко будет найти другим аналитикам и девам.

https://habr.com/ru/companies/citydrive/articles/913866/

#sql #ClickHouse #телеметрия #каршеринг #массивы #каршеринговый_сервис

Массивы вместо self-join: как писать быстрые запросы в ClickHouse

Привет, Хабр! Я — Максим Шитилов, продуктовый аналитик в каршеринг-сервисе Ситидрайв. Каждый день мы обрабатываем большие объёмы данных, и ClickHouse — один из наших ключевых инструментов. Если вы...

Хабр

SQL HowTo: работаем с массивами (Advent of Code 2024, Day 23: LAN Party)

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024 . Возможно, SQL не самый подходящий для этого язык, зато мы рассмотрим его различные возможности, о которых вы могли и не подозревать. Применяем простые операции над массивами, чтобы определить связность графов.

https://habr.com/ru/companies/tensor/articles/895928/

#postgresql #sql #sql_tips_and_tricks #массивы

SQL HowTo: работаем с массивами (Advent of Code 2024, Day 23: LAN Party)

В этой  челлендж-серии статей  попробуем использовать PostgreSQL как среду для решения задач  Advent of Code 2024 . Возможно, SQL не самый подходящий для этого язык, зато мы рассмотрим...

Хабр

Когда слайсы начинают расти

Я не применяю Go в коммерческой разработке, я недавно начал изучать и применять этот язык для пет-проектов и разного рода опытов. В этой статье мы поговорим о слайсах, принципах работы с ними, а также о том, как они растут, по каким правилам и насколько очевиден их рост.

https://habr.com/ru/articles/874084/

#go #golang #программирование #слайсы #slice #массивы #array

Когда слайсы начинают расти

Введение Я не применяю Go в коммерческой разработке, я недавно начал изучать и применять этот язык для пет-проектов и разного рода опытов. В этой статье речь пойдёт о слайсах. Пример, который мы будем...

Хабр

SQL HowTo: оптимизируем рекурсию (Advent of Code 2024, Day 9: Disk Fragmenter)

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024 . Возможно, SQL не самый подходящий для этого язык, зато мы рассмотрим его различные возможности, о которых вы могли и не подозревать. В этой части рассмотрим некоторые "грабли", на которые можно наступить, реализуя рекурсивные алгоритмы на SQL... Которые иногда можно сделать вовсе нерекурсивными, ускоряя запрос в десятки раз !

https://habr.com/ru/companies/tensor/articles/873702/

#postgresql #sql #sql_tips_and_tricks #рекурсия #массивы

SQL HowTo: оптимизируем рекурсию (Advent of Code 2024, Day 9: Disk Fragmenter)

В этой  челлендж-серии статей  попробуем использовать PostgreSQL как среду для решения задач  Advent of Code 2024 . Возможно, SQL не самый подходящий для этого язык, зато мы рассмотрим...

Хабр

Белый Прямоугольник (классическая задачка вместо приветствия)

Оказывается Хабр доброжелательно предоставляет возможность завести бесплатный "корпоративный" блог для опенсорсного проекта. Какое-то время назад я подал заявку - и недавно обнаружил что она была удовлетворена. Начинать программисты любят с "тестового" поста, но т.к. речь идёт о публичном пространстве, пусть он будет хоть немного содержательным :) На сайт CodeAbbey сегодня добавилась задачка про поиск Белого Прямоугольника . Речь идёт о матрице в которой есть чёрные и белые клетки - расставленные достаточно хаотично - и хочется найти прямоугольник без чёрных клеток максимальной площади (со сторонами параллельными сторонам матрицы, конечно). Про сам сайт мы ещё расскажем в отдельно (иначе зачем блог было заводить) - а сейчас всё же про саму задачку. И что там про задачку?

https://habr.com/ru/companies/codeabbey/articles/869720/

#алгоритмы #массивы #задачи #задачи_для_программистов

Белый Прямоугольник (классическая задачка вместо приветствия)

Оказывается Хабр доброжелательно предоставляет возможность завести бесплатный "корпоративный" блог для опенсорсного проекта. Какое-то время назад я подал заявку - и недавно обнаружил что она была...

Хабр

SQL HowTo: поиск в словаре и массивах, сортировка «пузырьком» (Advent of Code 2024, Day 5: Print Queue)

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024 . Возможно, SQL не самый подходящий для этого язык, зато мы рассмотрим его различные возможности, о которых вы могли и не подозревать. В этой части воспользуемся обширными возможностями поиска в массивах и реализуем рекурсивную сортировку "пузырьком".

https://habr.com/ru/companies/tensor/articles/869654/

#postgresql #sql #sql_tips_and_tricks #advent_of_code__2024 #массивы #словари

SQL HowTo: поиск в словаре и массивах, сортировка «пузырьком» (Advent of Code 2024, Day 5: Print Queue)

В этой  челлендж-серии статей  попробуем использовать PostgreSQL как среду для решения задач  Advent of Code 2024 . Возможно, SQL не самый подходящий для этого язык, зато мы рассмотрим...

Хабр

Базовое программирование, или Почему джуны не могут пройти к нам собеседование

Я – начальник отдела разработки небольшой государственной компании, и в последнее время мне снова пришлось провести несколько десятков созвонов-собеседований, с которых мне удалось отобрать только одного человека. О том, почему выпускники скиллбоксов присылают резюме пачками, но выхлоп от обучения собственных юристов компании оказывается выше, чем от собеседований по вакансии – эта статья. Важно при этом отметить, что я считаю себя достаточно адекватным собеседующим. Я практически не задаю лично-специфичных вопросов (моя часть – техническое собеседование, и мы с него начинаем); отвечаю всем кандидатам, чтобы сразу было понятно, рассматриваем мы их или нет; стараюсь построить собеседование так, чтобы на него не уходило больше полутора часов; не спрашиваю про красно-черные деревья и знание алгоритмов; и вообще имею достаточно четкие критерии для оценки собеседуемых, которые и попытаюсь для вас обосновать.

https://habr.com/ru/articles/863922/

#javascript #php #строки #массивы #войти_в_it

Базовое программирование, или Почему джуны не могут пройти к нам собеседование

Я – начальник отдела разработки небольшой государственной компании, и в последнее время мне снова пришлось провести несколько десятков созвонов-собеседований, с которых мне удалось отобрать только...

Хабр

Array функции Clickhouse

Когда вы анализируете данные, базовых функций SQL часто недостаточно, особенно когда дело касается сложных запросов и обработки больших объемов информации. В таких случаях на помощь приходят функции для работы с массивами в ClickHouse. Однако, многие пользователи не знают о их существовании или не используют их в полной мере. Эта статья — небольшой гид по функциям работы с массивами в ClickHouse. Мы рассмотрим самые полезные и мощные инструменты, такие как arrayJoin , arrayMap , arrayFilter , и другие. Разберём, как их использовать для решения повседневных задач аналитики данных, на конкретных примерах. Почему это важно? Потому что умение грамотно работать с массивами позволяет сократить и упростить код, делая его более читаемым и поддерживаемым. Это ключевой навык для тех, кто хочет писать оптимальные запросы. Вам могут пригодиться array функции, когда стандартные SQL-запросы становятся сложными и трудными для понимания. Например, вместо использования множества подзапросов и объединений для отслеживания последовательности действий пользователя, вы можете использовать функции работы с массивами. Кроме того, использование функций позволяет фильтровать элементы внутри массива, избавляя от необходимости написания сложных условий в подзапросах. Функции работы с массивами в ClickHouse помогут сократить количество кода и упростить запросы, заменяя многократные подзапросы на более элегантные и читабельные решения.

https://habr.com/ru/articles/836140/

#clickhouse #sql #array #массивы #sql_tips_and_tricks

Array функции Clickhouse

Когда вы анализируете данные, базовых функций SQL часто недостаточно, особенно когда дело касается сложных запросов и обработки больших объемов информации. В таких случаях на помощь приходят функции...

Хабр

[Перевод] Механизм перезапускаемых последовательностей (Rseq) при работе с TCMalloc

❯ Кэши для отдельных ядер процессора В TCMalloc кэши для отдельных ядер процессора реализуются при помощи перезапускаемых последовательностей (man rseq(2)) под Linux. Эту возможность ядра разработали Пол Тёрнер и Эндрю Хантер из Google , а также Мэтью Дезнойерс из EfficiOS. При помощи перезапускаемых последовательностей можно вплоть до завершения выполнять область памяти (атомарно, относительно других потоков, выполняющихся на том же ядре процессора), либо выходить из этого процесса, если ядро прервёт этот процесс, например, вытеснив его или прервавшись на обработку сигнала. Если вы хотите организовать перезапуск системы при миграции с ядра на ядро или при вытеснении процесса, то наиболее общий случай такой операции можно оптимизировать (не переносить с ядра на ядро тот процесс, который уже выполняется), избегая атомарных операций. Можно оптимизировать и более редкий случай – вытеснение как таковое. В результате такого компромисса нужно обеспечить, чтобы на всех путях выполнения нашего кода поддерживались такие операции перезапуска. Вся последовательность, кроме окончательного сохранения в памяти, когда изменение фиксируется, должна быть приспособлена к перезапуску.

https://habr.com/ru/companies/timeweb/articles/789470/

#timeweb_статьи_перевод #Rseq #TCMalloc #Google #EfficiOS #ядро #ID #ПК #C++ #массивы #ЦП #begin #x86 #процессор #кэш

Механизм перезапускаемых последовательностей (Rseq) при работе с TCMalloc

❯ Кэши для отдельных ядер процессора В TCMalloc кэши для отдельных ядер процессора реализуются при помощи перезапускаемых последовательностей (man rseq(2)) под Linux. Эту возможность ядра...

Хабр

Массивы в Kotlin

Я - Денис, Junior Android-разработчик в «Лайв Тайпинге». В этой статье расскажу о массивах. Вы узнаете: как они устроены в памяти компьютера, особенности реализации в разных ЯП, оптимизациях, а также частых вопросах на собеседованиях. Даже, если у вас большой опыт в разработки с Kotlin, думаю вы найдете что-то новое для себя в этой статье. Погнали!

https://habr.com/ru/articles/780492/

#kotlin #массивы #структуры_данных #программирование

Массивы в Kotlin

Денис Попков Junior Android Developer Я — Денис, Junior Android-разработчик в «Лайв Тайпинге». В этой статье расскажу о массивах. Вы узнаете: как они устроены в памяти компьютера, особенности...

Хабр