Sdílet prostřednictvím


table_changes funkce s hodnotou tabulky

Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime

Vrátí protokol změn v tabulce Delta Lake s povoleným sledováním změn.

Pokud chcete vyvolat tuto funkci, musíte mít alespoň jednu z následujících možností:

  • SELECT oprávnění pro zadanou tabulku
  • Stát se vlastníkem stolu
  • Mít oprávnění správce

Syntaxe

table_changes ( table_str, start [, end ] )

Argumenty

  • table_str: LITERÁL STRING představující volitelně kvalifikovaný název tabulky.
  • start: Literál BIGINT nebo TIMESTAMP, který představuje první verzi nebo časové razítko změny, jež má být vráceno.
  • end: Volitelný literál BIGINT nebo TIMESTAMP představující poslední verzi nebo časové razítko změny, které se mají vrátit. Pokud není specifikováno, vrátí se všechny změny od start až po aktuální změnu.

Návraty

Tabulka obsahující všechny sloupce tabulky identifikované v table_stra následující sloupce:

  • _change_type STRING NOT NULL

    Určuje změnu: delete, insert, update_preimagenebo update_postimage

  • _commit_version BIGINT NOT NULL

    Určuje verzi potvrzení tabulky přidružené ke změně.

  • _commit_timestamp TIMESTAMP NOT NULL

    Určuje časové razítko potvrzení přidružené ke změně.

Pokud table_str nepředstavuje kvalifikovaný název tabulky, název je kvalifikovaný s hodnotou current_schema. Pokud název tabulky obsahuje mezery nebo tečky, použijte zpětné uvozovky v řetězci k uvozovkách této části názvu.

Příklady

-- Create a Delta table with Change Data Feed;
> CREATE TABLE myschema.t(c1 INT, c2 STRING) TBLPROPERTIES(delta.enableChangeDataFeed=true);

-- Modify the table
> INSERT INTO myschema.t VALUES (1, 'Hello'), (2, 'World');
> INSERT INTO myschema.t VALUES (3, '!');
> UPDATE myschema.t SET c2 = upper(c2) WHERE c1 < 3;
> DELETE FROM myschema.t WHERE c1 = 3;

-- Show the history of table change events
> DESCRIBE HISTORY myschema.t;
 version timestamp                    userId           userName      operation    operationParameters                                            ...
       4 2022-09-01T18:32:35.000+0000 6167625779053302 alf@melmak.et DELETE       {"predicate":"[\"(spark_catalog.myschema.t.c1 = 3)\"]"}
       3 2022-09-01T18:32:32.000+0000 6167625779053302 alf@melmak.et UPDATE       {"predicate":"(c1#3195878 < 3)"}
       2 2022-09-01T18:32:28.000+0000 6167625779053302 alf@melmak.et WRITE        {"mode":"Append","partitionBy":"[]"}
       1 2022-09-01T18:32:26.000+0000 6167625779053302 alf@melmak.et WRITE        {"mode":"Append","partitionBy":"[]"}
       0 2022-09-01T18:32:23.000+0000 6167625779053302 alf@melmak.et CREATE TABLE {"isManaged":"true","description":null,"partitionBy":"[]","properties":"{\"delta.enableChangeDataFeed\":\"true\"}"}

-- Show the change table feed using a the commit timestamp retrieved from the history.
> SELECT * FROM table_changes('`myschema`.`t`', 2);
 c1 c2     _change_type    _commit_version _commit_timestamp
  3 !      insert                        2 2022-09-01T18:32:28.000+0000
  2 WORLD  update_postimage              3 2022-09-01T18:32:32.000+0000
  2 World  update_preimage               3 2022-09-01T18:32:32.000+0000
  1 Hello  update_preimage               3 2022-09-01T18:32:32.000+0000
  1 HELLO  update_postimage              3 2022-09-01T18:32:32.000+0000
  3 !      delete                        4 2022-09-01T18:32:35.000+0000

-- Show the ame change table feed using a point in time.
> SELECT * FROM table_changes('`myschema`.`t`', '2022-09-01T18:32:27.000+0000') ORDER BY _commit_version;
 c1 c2     _change_type    _commit_version _commit_timestamp
  3 !      insert                        2 2022-09-01T18:32:28.000+0000
  2 WORLD  update_postimage              3 2022-09-01T18:32:32.000+0000
  2 World  update_preimage               3 2022-09-01T18:32:32.000+0000
  1 Hello  update_preimage               3 2022-09-01T18:32:32.000+0000
  1 HELLO  update_postimage              3 2022-09-01T18:32:32.000+0000
  3 !      delete                        4 2022-09-01T18:32:35.000+0000