table_changes
表值函數
適用於:磚的SQL磚運行時
在啟用更改數據提要的情況下,返回Delta Lake表的更改日誌。
要調用此函數,您至少需要具備以下條件之一:
選擇
指定表上的特權做桌子的主人
具有管理權限
參數
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