Condividi tramite


Argomenti avanzati di AUTO CDC

Questa pagina illustra gli argomenti avanzati per l'uso delle tabelle di destinazione AUTO CDC e AUTO CDC FROM SNAPSHOT, incluse le operazioni DML, la lettura dei flussi di dati delle modifiche e il monitoraggio delle metriche di processo. Per un'introduzione alle AUTO CDC API, vedere Le API AUTO CDC: semplificare la cattura dei dati delle modifiche con le pipeline.

Aggiungere, modificare o eliminare dati in una tabella di streaming di destinazione

Se la pipeline pubblica tabelle in Unity Catalog, è possibile usare istruzioni DML ( Data Manipulation Language ), incluse le istruzioni insert, update, delete e merge, per modificare le tabelle di streaming di destinazione create dalle AUTO CDC ... INTO istruzioni .

Annotazioni

  • Le istruzioni DML che modificano lo schema di tabella di una tabella di streaming non sono supportate. Assicurarsi che le istruzioni DML non tentino di evolvere lo schema della tabella.
  • Le istruzioni DML che aggiornano una tabella di streaming possono essere eseguite solo in un cluster unity catalog condiviso o in un sql warehouse usando Databricks Runtime 13.3 LTS e versioni successive.
  • Poiché lo streaming richiede fonti dati a sola accodamento, se l'elaborazione necessita di streaming da una tabella di streaming di origine con modifiche, ad esempio tramite istruzioni DML, impostare il flag skipChangeCommits durante la lettura della tabella di streaming di origine. Quando viene impostata skipChangeCommits, le transazioni che eliminano o modificano i record nella tabella di origine vengono ignorate. Se il tuo processo di elaborazione non richiede una tabella di streaming, è possibile usare una vista materializzata (che non ha la limitazione di solo aggiunta) come tabella di destinazione.

Poiché Lakeflow Spark Declarative Pipelines usa una colonna specificata SEQUENCE BY e propaga i valori di sequenziazione appropriati alle __START_AT colonne e __END_AT della tabella di destinazione (per scD Type 2), è necessario assicurarsi che le istruzioni DML usino valori validi per queste colonne per mantenere l'ordinamento corretto dei record. Vedere Funzionamento di AUTO CDC.

Per altre informazioni sull'uso di istruzioni DML con tabelle di streaming, vedere Aggiungere, modificare o eliminare dati in una tabella di streaming.

Nell'esempio seguente viene inserito un record attivo con una sequenza iniziale pari a 5:

INSERT INTO my_streaming_table (id, name, __START_AT, __END_AT) VALUES (123, 'John Doe', 5, NULL);

Suggerimento

Se è necessario rinominare le colonne __START_AT e __END_AT nella tabella di destinazione SCD Type 2 (ad esempio, per soddisfare i requisiti dello schema downstream), creare una vista sulla tabella di destinazione:

CREATE VIEW my_employees_view AS
SELECT
  *,
  __START_AT AS valid_from,
  __END_AT AS valid_to
FROM my_scd2_target_table;

Leggere un feed di dati di modifica da una tabella di destinazione AUTO CDC

In Databricks Runtime 15.2 e versioni successive, è possibile leggere un feed di dati delle modifiche da una tabella di streaming che è la destinazione delle query AUTO CDC o AUTO CDC FROM SNAPSHOT nello stesso modo in cui si legge un feed di dati delle modifiche da altre tabelle Delta. Per leggere il feed di dati delle modifiche da una tabella di streaming di destinazione, è necessario quanto segue:

  • La tabella di streaming di destinazione deve essere pubblicata in Unity Catalog. Vedere Usare il catalogo Unity con le pipeline.
  • Per leggere il feed di dati delle modifiche dalla tabella di streaming di destinazione, è necessario usare Databricks Runtime 15.2 o versione successiva. Per leggere il feed di dati delle modifiche in una pipeline diversa, la pipeline deve essere configurata per l'uso di Databricks Runtime 15.2 o versione successiva.

Il feed di dati delle modifiche viene letto da una tabella di streaming di destinazione creata in Pipeline dichiarative di Lakeflow Spark nello stesso modo in cui si legge un feed di dati delle modifiche da altre tabelle Delta. Per altre informazioni sull'uso della funzionalità del feed di dati delle modifiche Delta, inclusi esempi in Python e SQL, vedere Usare il feed di dati delle modifiche Delta Lake in Azure Databricks.

Annotazioni

Il record del feed di dati delle modifiche include metadati che identificano il tipo di evento di modifica. Quando un record viene aggiornato in una tabella, i metadati per i record di modifica associati in genere includono _change_type valori impostati su update_preimage ed update_postimage eventi.

Tuttavia, i _change_type valori sono diversi se vengono effettuati aggiornamenti alla tabella di streaming di destinazione, inclusa la modifica dei valori della chiave primaria. Quando le modifiche includono aggiornamenti alle chiavi primarie, i _change_type campi dei metadati vengono impostati su insert ed delete eventi. Le modifiche apportate alle chiavi primarie possono verificarsi quando vengono apportati aggiornamenti manuali a uno dei campi chiave con un'istruzione UPDATE o MERGE o, per le tabelle di tipo 2, quando il __start_at campo cambia in modo da riflettere un valore della sequenza iniziale precedente.

La AUTO CDC query determina i valori della chiave primaria, che differiscono per l'elaborazione scD di tipo 1 e scD di tipo 2:

Tipo SCD Chiave primaria
ScD di tipo 1 e l'interfaccia Python delle pipeline La chiave primaria è il valore del keys parametro nella create_auto_cdc_flow() funzione . Per l'interfaccia SQL la chiave primaria è la colonna definita dalla KEYS clausola nell'istruzione AUTO CDC ... INTO .
SCD di tipo 2 La chiave primaria è il parametro o keys la KEYS clausola più il valore restituito dall'operazionecoalesce(__START_AT, __END_AT), dove __START_AT e __END_AT sono le colonne corrispondenti della tabella di streaming di destinazione.

Ottieni dati sui record elaborati da una query CDC delle pipeline

Annotazioni

Le metriche seguenti vengono acquisite solo dalle AUTO CDC query e non dalle AUTO CDC FROM SNAPSHOT query.

Le metriche seguenti vengono acquisite dalle AUTO CDC query:

  • num_upserted_rows: numero di righe di output inserite nel set di dati durante un aggiornamento.
  • num_deleted_rows: numero di righe di output esistenti eliminate dal set di dati durante un aggiornamento.

La metrica num_output_rows, l'output per i flussi non CDC, non viene acquisita per le query AUTO CDC.

Quali oggetti dati vengono usati per l'elaborazione CDC in una pipeline?

Quando si dichiara la tabella di destinazione nel metastore Hive, vengono create due strutture di dati:

  • Visualizzazione che usa il nome assegnato alla tabella di destinazione.
  • Tabella di backup interna usata dalla pipeline per gestire l'elaborazione CDC. Questa tabella viene denominata anteponendo __apply_changes_storage_ al nome della tabella di destinazione.

Ad esempio, se si dichiara una tabella di destinazione denominata dp_cdc_target, nel metastore viene visualizzata una vista denominata dp_cdc_target e una tabella denominata __apply_changes_storage_dp_cdc_target. Eseguire una query sulla vista per accedere ai dati elaborati. Non modificare direttamente la tabella di backup.

Annotazioni

Queste strutture di dati si applicano solo all'elaborazione AUTO CDC, non all'elaborazione AUTO CDC FROM SNAPSHOT. Si applicano anche solo al metastore Hive, non al catalogo Unity.