table_changes
テーブル値関数
適用対象: Databricks SQL Databricks Runtime
変更データ フィードが有効になっている Delta Lake テーブルに対する変更のログを返します。
この関数を呼び出すには、次のいずれかが必要です。
- 指定されたテーブルに対する
SELECT
権限 - テーブルの所有者であること
- ローカル管理者特権があること
構文
table_changes ( table_str, start [, end ] )
引数
table_str
: テーブルの省略可能な修飾名を表す文字列リテラル。start
: 返される変更の最初のバージョンまたはタイムスタンプを表す BIGINT または TIMESTAMP リテラル。end
: 返される変更の最後のバージョンまたはタイムスタンプを表す省略可能な BIGINT または TIMESTAMP リテラル。 指定されていない場合は、start
から現在の変更までのすべての変更が返されます。
戻り値
table_str
で識別されるテーブルのすべての列と、次の列を含むテーブル。
_change_type STRING NOT NULL
変更を指定します:
delete
、insert
、update_preimage
、update_postimage
のいずれか_commit_version BIGINT NOT NULL
変更に関連付けられているテーブルのコミット バージョンを指定します。
_commit_timestamp TIMESTAMP NOT NULL
変更に関連付けられているコミット タイムスタンプを指定します。
table_str
が修飾されたテーブル名を表していない場合、その名前は current_schema
の値で修飾されます。
テーブル名にスペースまたはドットが含まれている場合は、文字列内でバック クォートを使用して、名前のその部分を引用符で囲みます。
例
-- 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