Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
TVF
S’applique à :
Databricks SQL
Databricks Runtime
Retourne un journal des modifications apportées à une table Delta Lake avec le flux de données de modifications activé.
Pour appeler cette fonction, vous devez disposer d’au moins un des éléments suivants :
- Privilège
SELECTsur la table spécifiée - Être le propriétaire de la table
- Disposer de privilèges d’administration
Syntaxe
table_changes ( table_str, start [, end ] )
Arguments
table_str: littéral STRING représentant le nom éventuellement qualifié de la table.start: littéral BIGINT ou TIMESTAMP, représentant la première version ou l’horodatage de modification à retourner.La fonction renvoie une erreur si
startest :- Une version antérieure à la première version disponible du tableau.
- Une version plus récente que la dernière version du tableau.
- Un horodatage postérieur au dernier timestamp de validation.
end: littéral BIGINT ou TIMESTAMP facultatif, représentant la dernière version ou l’horodatage de modification à retourner. Si cela n’est pas spécifié, tous les changements allantstartjusqu’à la modification actuelle sont renvoyés.La fonction renvoie une erreur si
endest :- Une version plus tardive que la dernière version du tableau, ou un horodatage postérieur au dernier timestamp de commit.
- Une version antérieure à la première version disponible du tableau, ou un horodatage antérieur au plus ancien temps de commit disponible.
Pour retourner toutes les modifications jusqu’à
startla dernière version, omettezend.
Retours
Tableau incluant toutes les colonnes de la table identifiées dans table_str, ainsi que les colonnes suivantes :
_change_type STRING NOT NULLSpécifie la modification :
delete,insert,update_preimageouupdate_postimage_commit_version BIGINT NOT NULLSpécifie la version de commit de la table associée à la modification.
_commit_timestamp TIMESTAMP NOT NULLSpécifie l’horodatage de validation associé à la modification.
Si table_str ne représente pas de nom de table qualifié, le nom est qualifié avec la valeur current_schema.
Si le nom de la table contient des espaces ou des points, utilisez des guillemets inversés dans la chaîne pour citer cette partie du nom.
Exemples
-- 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