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

BrontypeDoeltype
VARCHAR, CHAR, TEXT, STRING, …TEXT
NUMBER, DECIMAL, FLOAT, INT, …DECIMAL(digits_before, digits_after)
DATE, DATETIME, TIMESTAMP_*TIMESTAMP_TZ
TIMETIMESTAMP_TZ (anchor date 2000-01-01)
BOOLEAN, VARIANT, ARRAY, OBJECTUnchanged

Parameters

ParameterStandaardBeschrijving
relatieVerplicht. Verwijzing naar de brontabel via ref() of source().
voor_komma18Aantal cijfers vóór de komma bij DECIMAL casting.
na_komma4Aantal 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']
) }}