Pull to refresh
26
0
Artemiy Kozyr @kzzzr

Analytics Engineer / Data / Cloud

Send message

Дельные дополнения.
И да, скорее публикация ориентирована на маленькие-средние компании. С крупными предприятиями всегда есть нюансы. Читая, вспомнил и свой опыт работы с Informatica PC, кажется, в том же Банке :)
Спасибо за то, что делитесь опытом!

Пробую объяснить свой сценарий.
Есть Greenplum как general purpose DWH, в нем делаются все преобразования, джоины, тяжелые расчеты. В результате получаются витрины, содержащие очищенные и ценные данные.
Эти витрины имеет смысл перенести в Clickhouse, т.к. именно Clickhouse может обеспечить отклик запросов за миллисекунды.

Например, BI инструмент будет смотреть именно в Clickhouse.
Пользователю, работающему с BI (PowerBI / Tableau / Datalens / ...) не обязательно знать детали реализации и что и куда смотрит. Он просто кликает графики и дашборды, получая ответы на вопросы интерактивно, вне зависимости от объемов данных.

Недаром Arenadata строит свой стек на Hadoop + Greenplum + Clickhouse (и всё Open Source).

Интересный комментарий из ТГ:

От Select * есть технологический антидот - SQLFluff, rule_L044

Про CTE хотелось бы узнать, какие парсеры-компиляторы умные, какие нет; и почему нельзя рассчитывать на умные.


Привет, спасибо.

Да, SQLFluff отдельная история.
В особенности с dbt (шаблонизированным кодом). Ее можно встраивать как проверку на этапе DEV – тогда каждый разработчик/аналитик сам отвечает.
Либо на этапе TEST/CI – как проверка кода, тогда в этом контуре нужно будет скомпилировать код и проверить.

По поводу парсеров – я имел в виду сами аналитические движки. Часть из них может составить полный план запроса и оптимизировать (переписать).
Например, 3 CTE читающие разные таблицы select *, финальный запрос с применением фильтра WHERE на даты + категории.
Часть движков сможет эти фильтры переместить сразу в изначальные CTE, чтобы не читать все строки. Другие движки будут полностью собирать 3 CTE-таблицы в промежуточную область, и только потом фильтровать, что будет значительно дольше.

Действительно Airbyte решили выпилить коннектор HTTP Request.
Подробности здесь: https://github.com/airbytehq/airbyte/pull/5185.
API Метрики можно подключить так:
– Source type: File
– Provider: HTTPS

Тот, кто был замотивирован, уже выиграл бесплатное обучение.
Любое качественное обучение и материал стоит денег. Платите ли вы их напрямую, либо косвенно.
С интересом прочел, думаю, как и многие другие.
Большое уважение. Спасибо, Дмитрий, что делишься опытом!
Привет, спасибо за вопрос.

Всё верно подмечено.

3 дня это дефолтные настройки для ускорения разработки и экономии ресурсов. Каждое подключение конфигурируется «тегом». Сейчас их всего 3 для удобства: dev (для каждого члена команды), ci (он же тест), prod. У аналитиков по дефолту dev в настройках подключения под личной учеткой. Это реализовано в макросе:
{#- prepare expression to filter rows to last 'development_days_of_data' (e.g. last 3 days) -#}
    {%- if target.name in ['dev', 'ci'] and last_n_days_of_data == true -%} 
        {%- set dev_rows_expression = ts_field ~ ' >= dateadd(day, ' ~ -var('development_days_of_data') ~ ', current_timestamp::date)' -%}
    {%- else -%} 
        {%- set dev_rows_expression = '1 = 1' -%}
    {%- endif -%}

Если есть цель построить витрины за бОльший период или оценить производительность – просто корректируется скомпилированный код вручную (убирается фильтр либо расширяется диапазон дат), запускается через dbeaver. Либо просто в локальной версии репо меняется значение переменной:
vars:
    development_days_of_data: 3
Красиво.
Качественная работа!
Отдельное спасибо за код.
Отрадно видеть в слайдах дашборд по мониторингу dbt джобов, который я создал для Wheely :)
Нелишним считаю сослаться на свой обзор от мая 2020: habr.com/ru/company/otus/blog/501380

dbt очень перспективный инструмент. Россия немного отстает в части адаптации и внедрения. Но интерес будет только расти в ближайшее время.

Сегодня в русскоязычном сегменте не хватает кейсов на dbt. Моя недавняя публикация на тему решения для Сквозной Аналитики на Хабр:
habr.com/ru/post/538106

То, что не вошло в этот выпуск, но тоже часто используется:

  • Подзапросы и коррелированные запросы: EXISTS & IN
  • Работа с иерархическими структурами (например, организационная структура)
  • User Defined Functions (UDF): Формирование суррогатных ключей, Интересный пример с расшифровкой битовой маски (Bitmask)
  • Работа с гео-данными: например, найти ближайшие города к точкам на карте; сгруппировать точки на карте в гексагоны
  • Преобразование табличных данных: Pivot + Unpivot
Очень странно было увидеть недетерминированный запрос в решении. Где сортировка-то?
Для моей задачи сортировка неважна. После формирования колонки применяется фильтр LIKE на наличие тега или отсутствие. Но сортировка может иметь значение — это верное замечание. Пример с сортировкой: http://sqlfiddle.com/#!4/16ed58/10
Вы анонсировали ТРИ разные СУБД (а по тексту ещё и на четвёртую ссылаетесь). Соответственно вопрос — где описание/пример (или хотя бы упоминание) RANGE clause?
Например, шаг 4 в задаче сессионизации:
,sum(is_new_session) over (partition by user_id order by ts rows between unbounded preceding and current row) as session_index
А хэш-то зачем? чтобы сервер не скучал? Простой конкатенации вполне достаточно, тем более что всё использование результата — это сравнить с LAG() на точное совпадение.
Соглашусь, хеш можно расценить как избыточный шаг здесь, особенно при условии разового использования.
Кстати, а как решение справится с делением на сессии, если работать от одной учётной записи в двух разных окнах браузера, параллельно?
Думаю, кука в браузере будет одна и серия хитов из разных табов браузера будут записана как одна сессия.

Публикация скорее направлена на расширение кругозора и для тех, кто ищет подсказки и подходы к решению.
Хороший пример RFM-аналитики на Spark SQL + Databricks от Евгения Кудашева: www.youtube.com/watch?v=72mRlugPKNI

RFM (Recency-Frequency-Monetary value) — анализ Customer Lifetime Value, клиентская аналитика и прогнозирование продаж.
Спасибо, тоже давно поглядываю в сторону Snowflake.
Немного охлаждает пыл необходимость полноценного тестирования, подготовки плана миграции.

Однако мы используем dbt для всей логической модели Хранилища, а dbt отлично интегрирован как с Redshift, так и со Snowflake (и с BigQuery, но его пока не рассматриваем).

Про проект Хранилища Wheely на dbt будет большой отдельный пост!
Честно говоря, не рассматривался. Знаю про продукт и примерно сценарии его использования.
Некоторое время назад там не было полноценной поддержки соединения таблиц (JOIN). Предлагалось создавать широкие таблицы и работать с ними.
В Wheely специфика метрик и расчетов предполагает большое количество соединений и сложных, многоуровневых CTE.
В целом симпатизирую Clickhouse, присмотрюсь в будущем, возможно потестируем что-то и найдем применение.
Спасибо за ответ. Примерно так и предполагал. У нас сейчас в команде нет возможности выделить ресурс на полноценный Ops-сопровождение решения.
В Redshift радует то, что это fully managed service. Раз в неделю автоматические обновления, в случае необходимости рестарт кластера 1-й кнопкой, автоматические бэкапы, и всё родное для AWS.
Vertica функциональнее, соглашусь. Если уметь выжать из неё всё. Уже несколько лет назад там были полнотекстовый индекс, in-database ML, сессионизация, pattern-matching по сессиям. И фишка с проекциями конечно супер.
Кстати, справедливости ради, хочется именно подчеркнуть, что время на компиляцию требуется только при первом запуске запроса. Все последующие запуски в точности того же запроса происходят без этапа компиляции.
Т.е. при использовании BI-инструментов (читай конструкторов запросов) и преднастроенных дашбордов эффект может быть и незаметен.
Верно! Есть такая особенность, может показаться неприятной.
Не буду оправдывать или защищать, Vertica я тоже очень люблю.

Что по поводу бюджета? При примерно одинаковых мощностях, что выходит дороже?
Как решается вопрос с Operations? Обновление версий/maintenance? На себя всё берет вендор?
Потенциально в планах на ближайшие месяцы PoC со Snowflake.
Snowflake отлично работает с JSON — у нас источник MongoDB.
Если получится — будет максимально объективный обзор и сравнение. Подписывайтесь и не пропустите!
Хахахаха! От GAR-мастера слышу :)
1

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity

Specialization

Data Engineer, Database Architect