table_changes functie met tabelwaarde

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Retourneert een logboek met wijzigingen in een Delta Lake-tabel waarvoor Wijzigingengegevensfeed is ingeschakeld.

Als u deze functie wilt aanroepen, moet u ten minste een van de volgende zaken hebben:

  • SELECT privileges voor de opgegeven tabel
  • De eigenaar van de tabel zijn
  • Beheerdersbevoegdheden hebben

Syntaxis

table_changes ( table_str, start [, end ] )

Argumenten

  • table_str: een letterlijke tekenreeks die de optioneel gekwalificeerde naam van de tabel vertegenwoordigt.

  • start: Een LETTERLIJKE WAARDE VOOR BIGINT of TIMESTAMP, die de eerste versie of tijdstempel van wijziging aangeeft die moet worden geretourneerd.

    De functie geeft een foutmelding als start is:

    • Een versie die eerder is dan de vroegst beschikbare versie van de tabel.
    • Een versie later dan de nieuwste versie van de tabel.
    • Een tijdstempel later dan de laatste commit-tijdstempel.
  • end: Een optionele LETTERLIJKE WAARDE VOOR BIGINT of TIMESTAMP, die de laatste versie of tijdstempel van wijziging aangeeft die moet worden geretourneerd. Indien niet gespecificeerd, worden alle wijzigingen tot start en met de huidige wijziging teruggegeven.

    De functie geeft een foutmelding als end is:

    • Een versie die later is dan de nieuwste versie van de tabel, of een tijdstempel die later is dan de laatste commit-tijdstempel.
    • Een versie vóór de vroegst beschikbare versie van de tabel, of een tijdstempel die eerder is dan de vroegst beschikbare commit-tijdstempel.

    Om alle wijzigingen terug te geven van start tot en met de nieuwste versie, laat endu .

Retouren

Een tabel met alle kolommen van de tabel die zijn geïdentificeerd in table_str, plus de volgende kolommen:

  • _change_type STRING NOT NULL

    Hiermee geeft u de wijziging: delete, insert, update_preimageof update_postimage

  • _commit_version BIGINT NOT NULL

    Hiermee geeft u de doorvoerversie van de tabel die aan de wijziging is gekoppeld.

  • _commit_timestamp TIMESTAMP NOT NULL

    Hiermee geeft u de tijdstempel voor doorvoeren die aan de wijziging is gekoppeld.

Als table_str geen gekwalificeerde tabelnaam vertegenwoordigt, wordt de naam gekwalificeerd met de waarde van current_schema. Als de tabelnaam spaties of puntjes bevat, gebruikt u tussen aanhalingstekens in de tekenreeks om dat deel van de naam aan te geven.

Voorbeelden

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