Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Databricks SQL
FLOW AUTO CDC Pomocí klauzule CREATE STREAMING TABLE můžete zpracovávat záznamy CDC (Change Data Capture) ze zdroje do tabulky streamování.
Dříve se MERGE INTO tento příkaz běžně používal ke zpracování záznamů CDC v Azure Databricks. Může však MERGE INTO vést k nesprávným výsledkům z důvodu záznamů mimo posloupnosti nebo vyžaduje složitou logiku pro opakované řazení záznamů.
AUTO CDC zjednodušuje CDC tím, že automaticky zpracovává záznamy mimo objednávku. Zadáte klíče k identifikaci záznamů, sekvenčního sloupce pro řazení a zda se mají ukládat výsledky jako scD typu 1 (přímé aktualizace) nebo SCD typu 2 (sledování historie).
Syntaxe
FLOW AUTO CDC
FROM source
KEYS ( keys )
[ IGNORE NULL UPDATES [ ON { columnList | * EXCEPT ( exceptColumnList ) } ] ]
[ APPLY AS DELETE WHEN condition ]
[ APPLY AS TRUNCATE WHEN condition ]
SEQUENCE BY orderByColumn
[ SYSTEM SEQUENCE BY systemOrderByColumn ]
[ COLUMNS { columnList | * EXCEPT ( exceptColumnList ) } ]
[ STORED AS { SCD TYPE 1 | SCD TYPE 2 | BITEMPORAL } ]
[ TRACK HISTORY ON { columnList | * EXCEPT ( exceptColumnList ) } ]
[ COLUMNS TO UPDATE columnName ]
Výchozí chování INSERT a UPDATE události slouží k přenesení událostí CDC ze zdroje: aktualizujte všechny řádky v cílové tabulce, které odpovídají zadaným klíčům, nebo vložte nový řádek, pokud v cílové tabulce neexistuje odpovídající záznam. Zpracování událostí DELETE lze zadat pomocí APPLY AS DELETE WHEN podmínky.
Parametry
sourceZdroj dat. Zdrojem musí být zdroj streamování. Pomocí klíčového
STREAMslova můžete ke čtení ze zdroje použít sémantiku streamování. Pokud čtení narazí na změnu nebo odstranění existujícího záznamu, vyvolá se chyba. Je nejbezpečnější číst ze statických nebo doplňovacích zdrojů.Další informace o streamovaných datech najdete v tématu Transformace dat pomocí kanálů.
KEYSSloupec nebo kombinace sloupců, které jednoznačně identifikují řádek ve zdrojových datech. Hodnoty v těchto sloupcích slouží k identifikaci událostí CDC, které se vztahují na konkrétní záznamy v cílové tabulce.
Pokud chcete definovat kombinaci sloupců, použijte čárkami oddělený seznam sloupců.
Tato klauzule je povinná.
IGNORE NULL UPDATESUmožňuje ingestování aktualizací obsahujících podmnožinu cílových sloupců. Když událost CDC odpovídá existujícímu řádku a
IGNORE NULL UPDATESje zadána, sloupce snullhodnotou si zachovají své stávající hodnoty v cíli. To platí i pro vnořené sloupce snullhodnotou.Pro částečné aktualizace přidejte
ONklauzuli, která určuje, které sloupce ignorujínullhodnoty:-
IGNORE NULL UPDATES ON columnList: Pouze uvedené sloupce si zachovají své stávající hodnoty, pokud jenullpříchozí hodnota . Všechny ostatní sloupce používají explicitnínullhodnoty. -
IGNORE NULL UPDATES ON * EXCEPT (exceptColumnList): Všechny sloupce kromě těch, které jsou uvedeny, si zachovají své stávající hodnoty, pokud jenullpříchozí hodnota . Uvedené sloupce používají explicitnínullhodnoty.
Další informace naleznete v tématu Instalace částečných aktualizací.
Tato klauzule je nepovinná.
Výchozí hodnotou je přepsání existujících sloupců
nullhodnotami.-
APPLY AS DELETE WHENUrčuje, kdy se má událost CDC považovat za událost
DELETE, nikoli jako upsert.Pro zdroje typu SCD typu 2 je odstraněný řádek dočasně zachován jako náhrobek v podkladové tabulce Delta a v metastoru se vytvoří zobrazení, které filtruje tyto náhrobky. Interval uchovávání informací lze nakonfigurovat s
pipelines.cdc.tombstoneGCThresholdInSecondsvlastností tabulky.Tato klauzule je nepovinná.
APPLY AS TRUNCATE WHENUrčuje, kdy má být událost CDC považována za úplnou tabulku
TRUNCATE. Vzhledem k tomu, že tato klauzule aktivuje úplné zkrácení cílové tabulky, měla by být použita pouze pro konkrétní případy použití vyžadující tuto funkci.Klauzule
APPLY AS TRUNCATE WHENje podporována pouze pro SCD typu 1. ScD typu 2 nepodporuje operaci zkrácení.Tato klauzule je nepovinná.
SEQUENCE BYNázev sloupce určující logické pořadí událostí CDC ve zdrojových datech. Zpracování potrubí používá toto sekvencování ke zpracování událostí změn, které přicházejí ve špatném pořadí.
Pokud je pro sekvencování potřeba více sloupců, použijte
STRUCTvýraz: seřadí se podle prvního pole struktury, pak podle druhého pole v případě shody, a tak dále.Zadané sloupce musí být řaditelné datové typy.
Tato klauzule je povinná.
SYSTEM SEQUENCE BYDůležitý
Bitemporal AUTO CDC je v beta verzi.
Název sloupce určující systémový čas, ve kterém je každá událost CDC známa systému.
STORED AS BITEMPORALPoužívá se ke sledování změn v pracovním čase (SEQUENCE BY) i systémovém čase. Viz Bitemporal AUTO CDC.Zadané sloupce musí být řaditelné datové typy.
Tato klauzule je nepovinná a vztahuje se pouze na bitemporální tabulky.
COLUMNSUrčuje podmnožinu sloupců, které se mají zahrnout do cílové tabulky. Máte tyto možnosti:
- Zadejte úplný seznam sloupců, které se mají zahrnout:
COLUMNS (userId, name, city). - Zadejte seznam sloupců, které chcete vyloučit:
COLUMNS * EXCEPT (operation, sequenceNum)
Tato klauzule je nepovinná.
Výchozí hodnota je zahrnout všechny sloupce v cílové tabulce, pokud
COLUMNSnení klauzule zadána.- Zadejte úplný seznam sloupců, které se mají zahrnout:
STORED ASZda se mají ukládat záznamy jako SCD typu 1, SCD typu 2 nebo bitemporal.
Nastavte si sledování
BITEMPORALzměn v obchodním i systémovém čase. Bitemporal vyžadujeSYSTEM SEQUENCE BYa je v beta verzi. Viz Bitemporal AUTO CDC.Tato klauzule je nepovinná.
Výchozí hodnota je SCD typu 1.
TRACK HISTORY ONUrčuje podmnožinu výstupních sloupců pro generování záznamů historie, pokud dojde k nějakým změnám těchto zadaných sloupců. Máte tyto možnosti:
- Zadejte úplný seznam sloupců, které chcete sledovat:
COLUMNS (userId, name, city). - Zadejte seznam sloupců, které se mají vyloučit ze sledování:
COLUMNS * EXCEPT (operation, sequenceNum)
Tato klauzule je nepovinná. Výchozí hodnota je sledovat historii všech výstupních sloupců, pokud dojde ke změnám, které jsou ekvivalentní
TRACK HISTORY ON *.- Zadejte úplný seznam sloupců, které chcete sledovat:
COLUMNS TO UPDATEUrčuje název zdrojového sloupce, který obsahuje pro každý záznam změn sadu sloupců, které se mají aktualizovat jako pole řetězců názvů sloupců (
array<string>). Sloupce, které nejsou v poli, zachovávají jejich stávající cílové hodnoty, zatímco uvedené sloupce se zapisují ze zdroje, včetně explicitníchnullhodnot.Tuto klauzuli použijte pro částečné aktualizace, když každý záznam změny aktualizuje jinou sadu sloupců a potřebujete použít explicitní
nullhodnoty.Nelze použít
COLUMNS TO UPDATEspolečně s tabulkamiIGNORE NULL UPDATESbitemporal a není podporován.Další informace naleznete v tématu Instalace částečných aktualizací.
Tato klauzule je nepovinná.
Příklady
-- SCD type 1: apply CDC changes with direct updates (no history)
> CREATE OR REFRESH STREAMING TABLE target
FLOW AUTO CDC
FROM stream(cdc_data.users)
KEYS (userId)
SEQUENCE BY sequenceNum
STORED AS SCD TYPE 1;
-- SCD type 2: retain a history of changes, with delete handling
> CREATE OR REFRESH STREAMING TABLE target
FLOW AUTO CDC
FROM stream(cdc_data.users)
KEYS (userId)
APPLY AS DELETE WHEN operation = "DELETE"
SEQUENCE BY sequenceNum
COLUMNS * EXCEPT (operation, sequenceNum)
STORED AS SCD TYPE 2;
-- SCD type 2 with history tracking on specific columns
> CREATE OR REFRESH STREAMING TABLE target
FLOW AUTO CDC
FROM stream(cdc_data.users)
KEYS (userId)
APPLY AS DELETE WHEN operation = "DELETE"
SEQUENCE BY sequenceNum
COLUMNS * EXCEPT (operation, sequenceNum)
STORED AS SCD TYPE 2
TRACK HISTORY ON * EXCEPT (city);
-- SCD type-2 dimension with a generated surrogate key and automatic clustering
> CREATE OR REFRESH STREAMING TABLE ${target_catalog}.silver.dim_customer (
customer_sk BIGINT GENERATED ALWAYS AS IDENTITY,
customer_id INT,
email STRING,
segment STRING,
city STRING,
__START_AT TIMESTAMP,
__END_AT TIMESTAMP
)
COMMENT 'SCD Type 2 customer dimension with generated surrogate key'
CLUSTER BY AUTO
FLOW AUTO CDC
FROM stream(${target_catalog}.bronze.customer_changes)
KEYS (customer_id)
SEQUENCE BY updated_at
STORED AS SCD TYPE 2;