table_changes
table-valued – funkce
Platí pro: Databricks SQL Databricks Runtime
Vrátí protokol změn v tabulce Delta Lake s povoleným datovým kanálem 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- Být vlastníkem tabulky
- 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 představující první verzi nebo časové razítko změny, které se mají vrátit.end
: Volitelný literál BIGINT nebo TIMESTAMP představující poslední verzi nebo časové razítko změny, které se mají vrátit. Pokud nezadáte všechny změny zstart
aktuální změny až do aktuální změny, vrátí se.
Návraty
Tabulka obsahující všechny sloupce tabulky uvedené v table_str
tabulce a následující sloupce:
_change_type STRING NOT NULL
Určuje změnu:
delete
,insert
,update_preimage
neboupdate_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