table_changes表值函數

適用於:勾選“是”磚的SQL勾選“是”磚運行時

在啟用更改數據提要的情況下,返回Delta Lake表的更改日誌。

要調用此函數,您至少需要具備以下條件之一:

  • 選擇指定表上的特權

  • 做桌子的主人

  • 具有管理權限

語法

table_changestable_str,開始(,結束

參數

  • table_str: STRING字麵值,表示表的可選限定名稱。

  • 開始: BIGINT或TIMESTAMP字麵值,表示要返回的更改的第一個版本或時間戳。

  • 結束:可選的BIGINT或TIMESTAMP字麵值,表示要返回的更改的最後版本或時間戳。如果未指定,則從開始返回到當前的更改。

返回

包含中標識的表的所有列的表table_str,加上以下各欄:

  • _change_type字符串

    指定更改:刪除,插入,update_preimage,或update_postimage

  • _commit_version長整型數字

    指定與更改關聯的表的提交版本。

  • _commit_timestamp時間戳

    指定與更改關聯的提交時間戳。

如果table_str不代表限定表名的名稱是限定的值current_schema.如果表名包含空格或點,請在字符串中使用反引號來引用該部分名稱。

例子

——用Change Data Feed創建Delta表;創建myschema表。t(c1 INT, c2 STRING) TBLPROPERTIES(delta.enableChangeDataFeed=true);——修改表> INSERT INTO myschema。t VALUES (1, 'Hello'), (2, 'World');插入到我的schema。t VALUES (3, '!');更新我的schema。t SET c2 = upper(c2) WHERE c1 < 3;刪除我的schema。t WHERE c1 = 3;——顯示表更改事件的曆史版本時間戳userId用戶名操作 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