Migawki DBT z unikalnymi wpisami w źródle

0

Pytanie

Jestem zainteresowany, aby wiedzieć, spotkałem się czy ktoś tutaj z sytuacją, gdy źródło nie zawsze jest wyjątkowy podczas pracy ze zdjęciami w DBT.
Mam jezioro danych, gdzie dane pochodzą tylko na podstawie dodawania. Za każdym razem, gdy źródło jest aktualizowany, w odpowiedniej tabeli w jeziorze danych tworzony jest nowy rekord.
Do momentu uruchomienia rozwiązania DBT w moim źródle może być więcej niż 1 wiersza z unikalnym identyfikatorem, ponieważ zmieniały się kilka razy od czasu ostatniego uruchomienia.
Najlepiej chciałbym zaktualizować odpowiednie kolumny dbt_valid_to z tabeli migawek z wczesnej odświeżony записью_at ze źródła, a następnie dodawać nowe rekordy do tabeli migawki poprzez najnowszą zaktualizowaną запись_at bieżącej. Wiem, jak to osiągnąć z pomocą okiennych funkcji, ale nie wiem, jak poradzić sobie z taką sytuacją z dbt. Co ciekawe, spotkałem się czy ktoś z takim samym problemem wcześniej?

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

Najlepsza odpowiedź

0

Standardowe migawki działają przy założeniu, że oryginalna tabela, którą kręcimy, zmienia się bez zapisywania historii. Jest to sprzeczne z zachowania, które mamy tutaj (w zasadzie oryginalna tabela, którą robimy, jest nie co innego, jak dziennik zdarzeń tylko dla dodawania), co oznacza, że może nam zejść z rąk proste użycie nudnego starego incremental model dla osiągnięcia tego samego rezultatu SCD2, które dają nam zdjęcia.

Mam tu przykład kodu, gdzie zrobiłem tylko to, co może trochę pomóc https://gist.github.com/jeremyyeo/3a23f3fbcb72f10a17fc4d31b8a47854

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

Zgadzam się, że byłoby to bardzo wygodne, jeśli masz zdjęć dbt była strategia, która mogłaby obejmować usuwanie duplikatów, ale dziś nie jest obsługiwany.

Najprostszym obejściem było przedstawienie sceny poniżej przepływu od źródła, w którym jest opisana okienna funkcja. Następnie robisz zdjęcie tego widoku.

Jednak widzę potencjał dla nowej strategii tworzenia migawek, która obsługuje dodawanie tylko źródeł. Być może chcieliby państwo zapoznać się z dokumentami dbt Snapshot i source strategii dla istniejących strategii, aby dowiedzieć się, czy chcesz utworzyć nowy!

2021-11-24 01:37:58

W innych językach

Ta strona jest w innych językach

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