다음을 통해 공유


table_changes table-valued 함수

적용 대상:예로 표시된 확인 Databricks SQL 예로 표시된 확인 Databricks Runtime

변경 데이터 피드를 사용하도록 설정된 Delta Lake table의 변경 로그를 반환합니다.

이 함수를 호출하려면 다음 중 하나 이상이 있어야 합니다.

  • 지정된 SELECT에 대한 table 권한
  • table의 소유자가 되세요.
  • 관리자 권한이 있음

구문

table_changes ( table_str, start [, end ] )

인수

  • table_str: table의 선택적으로 한정된 이름을 나타내는 STRING 리터럴입니다.
  • start: 반환할 변경의 첫 번째 버전 또는 타임스탬프를 나타내는 BIGINT 또는 TIMESTAMP 리터럴입니다.
  • end: 반환할 변경의 마지막 버전 또는 타임스탬프를 나타내는 선택적 BIGINT 또는 TIMESTAMP 리터럴입니다. 지정하지 않으면 start에서 현재 변경 내용까지의 모든 변경 내용이 반환됩니다.

반품

table에 식별된 columns의 모든 table을 포함하는 table_str, 그리고 다음의 columns:

  • _change_type STRING NOT NULL

    변경 내용(delete, insert, update_preimage 또는 update_postimage)을 지정합니다.

  • _commit_version BIGINT NOT NULL

    변경과 연결된 table의 커밋 버전을 명시합니다.

  • _commit_timestamp TIMESTAMP NOT NULL

    변경 내용과 연결된 커밋 타임스탬프를 지정합니다.

table_str이(가) 유효한 table 이름을 나타내지 않으면, 이름은 current_schema값으로 지정됩니다. table 이름에 공백이나 점이 포함된 경우 문자열 내에서 백 쿼트를 사용하여 이름의 해당 부분을 묶습니다.

예제

-- 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