last_snapshot_version-Funktion

Gibt die Version des zuletzt festgelegten Snapshots für den umschließenden AUTO CDC ... FROM SNAPSHOT Fluss zurück. Der committierte Snapshot kann aus einem vorherigen Pipeline-Update oder aus einer früheren Iteration des aktuellen Updates stammen.

Diese Funktion ist nur innerhalb der WITH VERSION (...) Klausel eines Flows AUTO CDC ... FROM SNAPSHOT verfügbar.

Syntax

last_snapshot_version()

Argumente

Diese Funktion akzeptiert keine Argumente.

Rücklieferungen

Eine einspaltige Relation mit demselben Spaltennamen und -typ wie die Version des beiliegenden Flusses, die 0 oder 1 Zeilen enthält:

  • 1 Zeile mit der zuletzt eingetragenen Snapshot-Version.
  • 0 Zeilen, wenn der Flow seit seiner Ersterstellung oder der letzten vollständigen Aktualisierung keinen Snapshot gemacht hat.

Nach jedem erfolgreichen last_snapshot_version() Snapshot wird diese committierte Version der nächsten Auswertung der Versionsabfrage angezeigt, einschließlich Bewertungen innerhalb desselben Pipeline-Updates. Dadurch kann ein Update mehrere Versionen in der Reihenfolge auswählen und verarbeiten.

Examples

Der folgende Fluss wird verwendet last_snapshot_version() , um die nächste Datei zu finden, die nach der letzten, die committed wurde, verarbeitet werden soll:

CREATE FLOW orders_cdc
  AS AUTO CDC INTO orders
  FROM SNAPSHOT (...)
  WITH VERSION (
    SELECT struct(modification_time, path) AS version
    FROM list_files('/Volumes/catalog/schema/landing/orders/')
    WHERE (
      NOT EXISTS (SELECT 1 FROM last_snapshot_version())
      OR struct(modification_time, path) > (SELECT version FROM last_snapshot_version())
    )
    ORDER BY modification_time, path
    LIMIT 1
  )
  KEYS (order_id);

Errors

last_snapshot_version() ist nur innerhalb der WITH VERSION (...) Klausel eines Flows AUTO CDC ... FROM SNAPSHOT verfügbar. Überall sonst löst Spark den Namen als gewöhnliche tabellenwertige Funktion auf. Da keine solche Funktion definiert ist, erhebt UNRESOLVABLE_TABLE_VALUED_FUNCTION sie (SQLSTATE 42883).