KLAUZULE O AUTOMATICKÉM TOKU CDC

Platí pro:označeno jako „ano“ 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

  • source

    Zdroj dat. Zdrojem musí být zdroj streamování. Pomocí klíčového STREAM slova 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ů.

  • KEYS

    Sloupec 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 UPDATES

    Umožň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 UPDATES je zadána, sloupce s null hodnotou si zachovají své stávající hodnoty v cíli. To platí i pro vnořené sloupce s null hodnotou.

    Pro částečné aktualizace přidejte ON klauzuli, která určuje, které sloupce ignorují null hodnoty:

    • IGNORE NULL UPDATES ON columnList: Pouze uvedené sloupce si zachovají své stávající hodnoty, pokud je nullpříchozí hodnota . Všechny ostatní sloupce používají explicitní null hodnoty.
    • IGNORE NULL UPDATES ON * EXCEPT (exceptColumnList): Všechny sloupce kromě těch, které jsou uvedeny, si zachovají své stávající hodnoty, pokud je nullpříchozí hodnota . Uvedené sloupce používají explicitní null hodnoty.

    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ů null hodnotami.

  • APPLY AS DELETE WHEN

    Urč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 WHEN

    Urč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 WHEN je podporována pouze pro SCD typu 1. ScD typu 2 nepodporuje operaci zkrácení.

    Tato klauzule je nepovinná.

  • SEQUENCE BY

    Ná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 STRUCT vý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 BY

    Dů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 BITEMPORAL Použí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.

  • COLUMNS

    Urč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 COLUMNS není klauzule zadána.

  • STORED AS

    Zda se mají ukládat záznamy jako SCD typu 1, SCD typu 2 nebo bitemporal.

    Nastavte si sledování BITEMPORAL změn v obchodním i systémovém čase. Bitemporal vyžaduje SYSTEM SEQUENCE BY a je v beta verzi. Viz Bitemporal AUTO CDC.

    Tato klauzule je nepovinná.

    Výchozí hodnota je SCD typu 1.

  • TRACK HISTORY ON

    Urč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 *.

  • COLUMNS TO UPDATE

    Urč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ích null hodnot.

    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í null hodnoty.

    Nelze použít COLUMNS TO UPDATE společně s tabulkami IGNORE 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;