Как стать автором
Обновить

Комментарии 11

Привет, спасибо за статью. Как реализовали инкрементальную загрузку, на основе снепшотов или что-то своё накрутили? Формируете ли таблицу ключей, на основе которой строится таблица сравнения для последующего инкрементельного обновления? Если да, то очень интересно, как реализовывали на dbt.

Привет, dbtvault использует материализацию incremental и при первой загрузке генерит один sql запрос (просто раскидывает по сущностям), при повторной загрузке он уже загружает
- только новые хабы
- только новые линки
- только те сателлиты у которых другой hash_diff
Конкретно в мы отказались от версионности сателлитов и подправили sql запрос, чтобы сохранялась только первая версия, связано это с тем, что это раздувает таблицу и усложняет запросы(надо выбрать самые актуальные), а в нашем случае профита не приносит.

Если говорить про архитектуру, то "грязные" данные хранились на кластере кликхауса и мы с помощью Dagster'a создавали в нем витрину с теми данными, которые хотим залить в datavault. На стороне гринплама была external table на эту витрину. И тем же дагстером запускали все стадии построения DataVault

Те пайплан выглядит примерно следующим образом:
clickhouse->pure_greenplum->raw_greenplum->stage_greenplum->raw_vault_greenplum


Лучше всего попробовать запустить на синтетических данных и посмотреть в target какие sql запросы получились

Приведу пример для хаба:

-- Generated by dbtvault.

WITH row_rank_1 AS (

SELECT * FROM (
    SELECT PRODUCT_PK, productname, LOAD_DATE, RECORD_SOURCE,
           ROW_NUMBER() OVER(
               PARTITION BY PRODUCT_PK
               ORDER BY LOAD_DATE ASC
           ) AS row_number
    FROM src_table

) as h
WHERE row_number = 1
),

records_to_insert AS (
    SELECT a.PRODUCT_PK, a.productname, a.LOAD_DATE, a.RECORD_SOURCE
    FROM row_rank_1 AS a
    LEFT JOIN "dvault"."dv_raw_vault"."h_product" AS d
    ON a.PRODUCT_PK = d.PRODUCT_PK
    WHERE d.PRODUCT_PK IS NULL
)

SELECT * FROM records_to_insert

Когда-нибудь наступит время когда кто-нибудь соберётся с силами и найдет достаточно времени чтобы наконец-то написать большую развернутую статью на тему "никогда не делайте data vault" :)

Проблема только в том что большинству из тех кто это понимает не хватает времени, тк они все эти датавольты переделывают

Может вы станете тем самым героем, кто спасет миллионы?

Надеюсь что когда нибудь все запланированные идеи исчерпаются и дойдут руки и до этого.

Марк, спасибо за статью и отдельно за адаптер dbt-greenplum)
Правильно же понял, что DDL-обвёртка для dbtvault-моделей по сути будет выполняться один раз, так как там инкрементальная материализация? Ну и DDL достаточно разово сделать напрямую в базе и тогда dbt вообще не будет выполнять код создания инкременатальной таблицы? Тем более когда партиции, нарезанные из dbt, закончатся, то "донарезать" все равно же в базе будете не через dbt?
А вот для материализации 'table' (или какой-нибудь хитрой кастомной)- это прям то, что нужно.

Привет! Создавать таблицы руками не обязательно, хоть и возможно, dbt - сам справится при первом вызове в случае инкрементальной материализации. Лучше всего взять pg, создать тестовый проект и посмотреть логику работы dbt. Если вызывать dbt -d run... он покажет все sql запросы, которые вызывает)
По поводу партиций - да, dbt сам не догадается, что надо добавлять партиции, к тому же у вас может быть "default" партиция, в которую уже greenplum будет складывать все данные для которых не нашлось конкретной партиции.
Приглашаю улучшать адаптер)

В случае материализации table, вы можете попробовать с помощью jinja инъекций реализовать логику создания партиций, хотя я не понимаю в каком случае это может понадобится. Если у вас остались вопросы, можем списаться в тг @Maaaaark)

развитие Airflow от его же создателей

Не верно. Dagster - это продукт Nicholas Schrock и его команды в Elementl. Бывший сотрудник Facebook, со-создатель GraphQL. Airflow вырос из Airbnb, одним из основных первых авторов был Maxime Beauchemin. Кажется что они никак не связаны.

Спасибо за статью. Как вам живется с Data Vault?

Привет, справедливо. Живем, обрастаем сущностями, хотя чистым datavault это назвать сложно. Ждем статью "никогда не делайте data vault", а главное что делать в таком случае.

hub-ы выкинуть да и жить дальше нормально, историю я смотрю вы уже выкинули, молодцы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации