Compartir a través de


table_changes función con valores de tabla

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Devuelve un registro de cambios en una tabla de Delta Lake con la fuente de distribución de datos de cambios habilitada.

Para invocar esta función necesita tener al menos uno de las siguientes:

  • Privilegio SELECT en la tabla especificada
  • Ser el propietario de la tabla
  • Tener privilegios administrativos

Sintaxis

table_changes ( table_str, start [, end ] )

Argumentos

  • table_str: un literal de CADENA que representa el nombre calificado opcionalmente de la tabla.
  • start: un literal BIGINT o MARCA DE TIEMPO, que representa la primera versión o marca de tiempo del cambio que se va a devolver.
  • end: un literal BIGINT o MARCA DE TIEMPO, que representa la última versión o marca de tiempo del cambio que se va a devolver. Si no se especifican todos los cambios, se devolverán desde start hasta el cambio actual.

Devoluciones

Una tabla que incluye todas las columnas de la tabla que se identifican en table_str, además de las columnas siguientes:

  • _change_type STRING NOT NULL

    Especifica el cambio: delete, insert, update_preimage o update_postimage

  • _commit_version BIGINT NOT NULL

    Especifica la versión de confirmación de la tabla que está asociada al cambio.

  • _commit_timestamp TIMESTAMP NOT NULL

    Especifica la marca de tiempo de confirmación que está asociada al cambio.

Si table_str no representa un nombre de tabla calificado, el nombre se calificará con el valor de current_schema. Si el nombre de la tabla contiene espacios o puntos, use comillas invertidas dentro de la cadena para citar esa parte del nombre.

Ejemplos

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