Terug naar Utils
dbt macro
Uniform Datatypes
Cast alle kolommen van een brontabel automatisch naar uniforme Snowflake datatypes, zonder handmatig elke kolom te hoeven specificeren.
Doel
Brondata bevat vaak een wirwar aan datatypes. De uniform_datatypes macro inspecteert de metadata van een tabel en genereert automatisch een SELECT statement waarbij elke kolom naar een consistent doeltype wordt gecast.
Ongeldige waarden worden via TRY_TO_* afgehandeld: in plaats van een fout te geven, worden ze omgezet naar NULL. Zo breekt een enkel vervuild getal je hele staginglaag niet meer.
Type-mapping
| Brontype | Doeltype |
|---|---|
| VARCHAR, CHAR, TEXT, STRING, … | TEXT |
| NUMBER, DECIMAL, FLOAT, INT, … | DECIMAL(digits_before, digits_after) |
| DATE, DATETIME, TIMESTAMP_* | TIMESTAMP_TZ |
| TIME | TIMESTAMP_TZ (anchor date 2000-01-01) |
| BOOLEAN, VARIANT, ARRAY, OBJECT | Unchanged |
Parameters
| Parameter | Standaard | Beschrijving |
|---|---|---|
| relatie | — | Verplicht. Verwijzing naar de brontabel via ref() of source(). |
| voor_komma | 18 | Aantal cijfers vóór de komma bij DECIMAL casting. |
| na_komma | 4 | Aantal cijfers ná de komma bij DECIMAL casting. |
| kolommen_uitsluiten | [] | Lijst met kolomnamen die niet worden getransformeerd. |
Gebruik
1. Aanroepen in een dbt model
Gebruik de macro als volledige body van een stagingmodel:
{{ uniform_datatypes(ref('my_source_table')) }}2. Precisie aanpassen
Stel de gewenste precisie in voor numerieke kolommen:
{{ uniform_datatypes(
source('raw', 'orders'),
voor_komma = 15,
na_komma = 2
) }}3. Kolommen uitsluiten
Geef een lijst mee van kolommen die je ongewijzigd wil laten:
{{ uniform_datatypes(
ref('my_source_table'),
kolommen_uitsluiten = ['_loaded_at', '_row_hash']
) }}