Моментальные снимки DBT с не уникальными записями в источнике

0

Вопрос

Мне интересно знать, сталкивался ли кто-нибудь здесь с ситуацией, когда источник не всегда уникален при работе со снимками в DBT.
У меня есть озеро данных, куда данные поступают только на основе добавления. Каждый раз, когда источник обновляется, в соответствующей таблице в озере данных создается новая запись.
К моменту запуска решения DBT в моем источнике может быть более 1 строки с уникальным идентификатором, поскольку данные менялись несколько раз с момента последнего запуска.
В идеале я хотел бы обновить соответствующие столбцы dbt_valid_to из таблицы моментальных снимков с самой ранней обновленной записью_at из источника, а затем добавить новые записи в таблицу моментальных снимков, сделав последнюю обновленную запись_at текущей. Я знаю, как добиться этого с помощью оконных функций, но не уверен, как справиться с такой ситуацией с dbt. Интересно, сталкивался ли кто-нибудь с такой же проблемой раньше?

Snapshot Table

| **id** |   **some_attribute** |   **valid_from**      |   **valid_to**          |
|  123   |      ABCD            |   2021-01-01 00:00:00 |    2021-06-30 00:00:00  | 
|  123   |      ZABC            |   2021-06-30 00:00:00 |      null               |

Source Table

|**id**|**some_attribute**|   **updated_at**    |
| 123  |   ABCD           | 2021-01-01 00:00:00 |-> already been loaded to snapshot
| 123  |   ZABC           | 2021-06-30 00:00:00 |-> already been loaded to snapshot
 -------------------------------------------
| 123  |   ZZAB           | 2021-11-21 00:10:00 |
| 123  |   FXAB           | 2021-11-21 15:11:00 |

Snapshot Desired Result

| **id** |   **some_attribute** |   **valid_from**      |   **valid_to**          |
|  123   |      ABCD            |   2021-01-01 00:00:00 |    2021-06-30 00:00:00  | 
|  123   |      ZABC            |   2021-06-30 00:00:00 |    2021-11-21 00:10:00  |
|  123   |      ZZAB            |   2021-11-21 00:10:00 |    2021-11-21 15:11:00  | 
|  123   |      FXAB            |   2021-11-21 15:11:00 |    null                 | 
dbt google-bigquery
2021-11-24 00:37:24
2

Лучший ответ

0

Стандартные моментальные снимки работают в предположении, что исходная таблица, которую мы снимаем, изменяется без сохранения истории. Это противоречит поведению, которое мы имеем здесь (в основном исходная таблица, которую мы снимаем, представляет собой не что иное, как журнал событий только для добавления), что означает, что нам может сойти с рук простое использование скучного старого incremental модель для достижения того же результата SCD2, который дают нам снимки.

У меня здесь есть пример кода, где я сделал как раз то, что может немного помочь https://gist.github.com/jeremyyeo/3a23f3fbcb72f10a17fc4d31b8a47854

2021-11-30 22:19:55
-1

Я согласен, что было бы очень удобно, если бы у снимков dbt была стратегия, которая могла бы включать дедупликацию, но сегодня она не поддерживается.

Самым простым обходом было бы представление сцены ниже по потоку от источника, в котором есть описанная вами оконная функция. Затем вы делаете снимок этого представления.

Тем не менее, я вижу потенциал для новой стратегии создания моментальных снимков, которая обрабатывает добавление только источников. Возможно, вы хотели бы ознакомиться с документами dbt Snapshot и исходным кодом стратегий для существующих стратегий, чтобы узнать, хотите ли вы создать новую!

2021-11-24 01:37:58

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................