Informationen zu einer inkrementellen Tabelle
Dataform aktualisiert Tabellen je nach Tabellentyp unterschiedlich. Währenddessen einer Tabelle oder Ansicht durchgeführt wird, erstellt Dataform das gesamte Tabelle oder Ansicht komplett neu erstellen.
Wenn Sie eine inkrementelle Tabelle definieren, erstellt Dataform die inkrementellen Tabelle komplett neu erstellen. Bei nachfolgenden Ausführungen Dataform fügt nur neue Zeilen in die inkrementelle Tabelle ein oder führt sie zusammen. gemäß den von Ihnen konfigurierten Bedingungen.
Dataform fügt neue Zeilen nur in Spalten ein, die bereits in der inkrementelle Tabelle. Wenn Sie Änderungen an der Definition der inkrementellen Tabelle vornehmen Abfrage hinzu (z. B. eine neue Spalte hinzufügen), müssen Sie die Tabelle von Grund auf neu erstellen. Wenn Sie das nächste Mal eine Ausführung der Tabelle auslösen, wählen Sie die Option Mit vollständiger Aktualisierung ausführen aus.
Hier sind einige häufige Anwendungsfälle für inkrementelle Tabellen:
- Leistungsoptimierung
- Für einige Arten von Daten, z. B. Webprotokolle oder Analysedaten, um nur neue Einträge zu verarbeiten, anstatt die gesamte Tabelle noch einmal zu verarbeiten.
- Latenzreduzierung
- Mit inkrementellen Tabellen lassen sich Workflows schnell, aber häufig ausführen. die Downstream-Latenz der Ausgabetabellen reduzieren.
- Tägliche Snapshots
- Sie können eine inkrementelle Tabelle konfigurieren, um tägliche Snapshots der Tabellendaten, z. B. zur Längsschnittanalyse gespeicherter Nutzereinstellungen in einer Produktionsdatenbank.
Hinweise
Öffnen Sie in der Google Cloud Console die Seite Dataform.
Wählen Sie ein Repository aus oder erstellen Sie ein Repository.
Wählen Sie einen Entwicklungsarbeitsbereich aus oder erstellen Sie einen.
Erstellen Sie eine Tabelle mit den
incremental
Tabellentyp.
Erforderliche Rollen
Um die Berechtigungen zu erhalten, die Sie zum Konfigurieren einer inkrementellen Tabelle benötigen,
bitten Sie Ihren Administrator, Ihnen
IAM-Rolle Dataform Editor (roles/dataform.editor
) für Arbeitsbereiche.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Teilmenge von Zeilen in einer inkrementellen Tabelle verarbeiten
Um eine Teilmenge von Zeilen zu bestimmen, die Dataform während jedes
Ausführung einer bedingten WHERE
-Klausel zu SQLX der inkrementellen Tabelle hinzufügen
Definitionsdatei. In der WHERE
-Klausel
können Sie eine inkrementelle und eine nicht-inkrementelle Bedingung angeben.
Dataform wendet die inkrementelle Bedingung während der Tabellenausführung an
ohne vollständige Aktualisierung und die nicht-inkrementelle Bedingung während der Ausführung
mit einer vollständigen Auffrischung.
So konfigurieren Sie eine inkrementelle Tabelle:
- Rufen Sie den Entwicklungsarbeitsbereich auf.
- Maximieren Sie im Bereich Dateien den Bereich
definitions/
. - Öffnen Sie eine SQLX-Datei mit inkrementeller Tabellendefinition.
Geben Sie eine
WHERE
-Klausel im folgenden Format ein:config { type: "incremental" } SELECT_STATEMENT ${when(incremental(), `WHERE INCREMENTAL_CONDITION`, `WHERE NON_INCREMENTAL_CONDITION`) }
Ersetzen Sie Folgendes:
- SELECT_STATEMENT: die
SELECT
-Anweisung, die definiert Ihre Tabelle INCREMENTAL_CONDITION: Die Bedingung, die Sie in
WHERE
angeben. Klausel zur Auswahl von Zeilen, die Dataform während der Tabellenausführung verarbeiten soll ohne vollständige Aktualisierung.NON_INCREMENTAL_CONDITION: Die Bedingung, die Sie in der
WHERE
-Klausel, um Zeilen auszuwählen, die Dataform während der Tabelle verarbeiten soll Ausführung mit einer vollständigen Aktualisierung.
- SELECT_STATEMENT: die
Optional: Klicken Sie auf Format.
Das folgende Codebeispiel zeigt eine inkrementelle Tabelle, die inkrementell
verarbeitet Zeilen der Tabelle productiondb.logs
:
config { type: "incremental" }
SELECT timestamp, message FROM ${ref("productiondb", "logs")}
${when(incremental(),
`WHERE date > (SELECT MAX(date) FROM ${self()}) AND country = "UK"`,
`WHERE country = "UK"`)}
Das folgende Codebeispiel zeigt eine inkrementelle Tabelle, die einen Snapshot erstellt
der Tabelle productiondb.customers
:
config { type: "incremental" }
SELECT CURRENT_DATE() AS snapshot_date, customer_id, name, account_settings FROM ${ref("productiondb", "customers")}
${when(incremental(), `WHERE snapshot_date > (SELECT MAX(snapshot_date) FROM ${self()})`) }
Zeilen in einer inkrementellen Tabelle zusammenführen
Um sicherzustellen, dass eine inkrementelle Tabelle nur eine Zeile enthält, die einer
Ausgewählte Spaltenkombination, ausgewählte Spalten als uniqueKey
festlegen auf
Zeilen mit demselben uniqueKey
zusammenführen. Wenn Sie die Tabelle aktualisieren,
Dataform führt Zeilen mit uniqueKey
zusammen, anstatt sie anzuhängen.
So konfigurieren Sie die Zusammenführung in einer inkrementellen Tabelle:
- Rufen Sie den Entwicklungsarbeitsbereich auf.
- Maximieren Sie im Bereich Dateien den Bereich
definitions/
. - SQLX-Datei mit inkrementeller Tabellendefinition auswählen
Legen Sie im Block
config
die ausgewählten Spalten alsuniqueKey
fest. im folgenden Format:uniqueKey: ["COLUMN_NAME"]
Ersetzen Sie COLUMN_NAME durch den Namen der ausgewählten Spalte.
Optional: Klicken Sie auf Format.
Das folgende Codebeispiel zeigt eine inkrementelle Tabelle mit dem transaction_id
Spalte, die auf uniqueKey
festgelegt ist, damit sie immer eine Zeile enthält:
config {
type: "incremental",
uniqueKey: ["transaction_id"]
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Zeilen in einer inkrementellen Tabelle filtern
Um in einer inkrementellen partitionierten Tabelle zu vermeiden, dass Dataform den
in der gesamten Tabelle, um übereinstimmende Zeilen zu finden, legen Sie für updatePartitionFilter
fest, dass nur
Teilmenge von Datensätzen.
Das folgende Codebeispiel zeigt eine inkrementell partitionierte Tabelle mit Zusammenführung
konfiguriert, indem die Attribute uniqueKey
und updatePartitionFilter
festgelegt wurden:
config {
type: "incremental",
uniqueKey: ["transaction_id"],
bigquery: {
partitionBy: "DATE(timestamp)",
updatePartitionFilter:
"timestamp >= timestamp_sub(current_timestamp(), interval 24 hour)"
}
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Vollständige Tabellenscans bei der Aufnahme aus einer partitionierten Tabelle vermeiden
Wenn Sie eine inkrementelle Tabelle erstellen, die auf eine partitionierte Tabelle verweist, sollten Sie Ihre Tabellenabfrage erstellen, um vollständige Tabellenscans von die partitionierte Tabelle bei jeder inkrementellen Aktualisierung.
Sie können die Anzahl der Partitionen begrenzen, die BigQuery zum Aktualisieren scannt
der inkrementellen Tabelle mithilfe eines konstanten Ausdrucks in der
Tabellenabfrage. Einen Wert aus der partitionierten Tabelle in eine Konstante umwandeln
können Sie mit BigQuery-Skripts
Deklarieren Sie den Wert als Variable im Block pre_operations
.
Verwenden Sie die Variable dann als konstanten Ausdruck in einer WHERE
-Klausel in
Die SELECT
-Abfrage.
Mit dieser Konfiguration aktualisiert Dataform die inkrementelle tabellenbasierte für die letzten Partitionen der partitionierten Tabelle, auf die verwiesen wird, ohne die gesamte Tabelle zu scannen.
Inkrementelle Tabelle konfigurieren, die auf eine partitionierte Tabelle verweist und vermeidet vollständige Tabellenscans:
- Rufen Sie den Entwicklungsarbeitsbereich auf.
- Maximieren Sie im Bereich Dateien den Bereich
definitions/
. - SQLX-Datei mit inkrementeller Tabellendefinition auswählen
- Im
pre_operations
-Block eine Variable mit BigQuery-Scripting deklarieren. - Die
SELECT
-Anweisung filtern, die die Tabelle mit einerWHERE
-Klausel definiert die auf die deklarierte Variable verweist. - Optional: Klicken Sie auf Format.
Das folgende Codebeispiel zeigt eine inkrementelle Tabelle, in der die referenzierte Tabelle verwendet wird.
Die Tabelle raw_events
ist nach event_timestamp
partitioniert:
config {
type: "incremental",
}
pre_operations {
DECLARE event_timestamp_checkpoint DEFAULT (
${when(incremental(),
`SELECT max(event_timestamp) FROM ${self()}`,
`SELECT timestamp("2000-01-01")`)}
)
}
SELECT
*
FROM
${ref("raw_events")}
WHERE event_timestamp > event_timestamp_checkpoint
Im vorherigen Codebeispiel ist die Variable event_timestamp_checkpoint
die im pre_operations
-Block definiert sind.
Die Variable event_timestamp_checkpoint
wird dann als konstanter Ausdruck verwendet.
in der WHERE
-Klausel.
Inkrementelle Tabelle von Grund auf neu mit vollständiger Aktualisierung neu erstellen
Sie können erzwingen, dass eine inkrementelle Tabelle von Grund auf neu erstellt wird, indem Sie entweder
Befehlszeilenschnittstelle mit der Option --full-refresh
oder mit der Option Mit vollständiger Aktualisierung ausführen,
eine Workflowausführung auslösen.
Wenn Sie die Option „Vollständige Aktualisierung“ auswählen, können Sie dies im Entwicklungsarbeitsbereich oder über
über die Dataform-Befehlszeile ignoriert Dataform die
${when(incremental(), ... }
während der Ausführung den Parameter
mit einer CREATE OR REPLACE
-Anweisung.
Inkrementelle Tabelle vor vollständiger Aktualisierung schützen
Um zu verhindern, dass eine inkrementelle Tabelle von Grund auf neu erstellt wird,
Datenverlust erfassen, können Sie die inkrementelle Tabelle als protected
festlegen. Vielleicht möchten Sie
verhindern, dass eine inkrementelle Tabelle neu erstellt wird, wenn Ihre Datenquelle temporär ist.
So markieren Sie eine inkrementelle Tabelle als protected
:
- Rufen Sie den Entwicklungsarbeitsbereich auf.
- Maximieren Sie im Bereich Dateien den Bereich
definitions/
. - Wählen Sie eine SQLX-Datei mit inkrementeller Tabellendefinition aus.
- Geben Sie im Block
config
den Wertprotected: true
ein. - Optional: Klicken Sie auf Format.
Das folgende Codebeispiel zeigt eine inkrementelle Tabelle, die als protected
gekennzeichnet ist:
config {
type: "incremental",
protected: true
}
SELECT ...
Nächste Schritte
- Informationen zum Definieren einer Tabelle finden Sie unter Tabelle erstellen
- Informationen zur Verwendung der Dataform-Befehlszeilenschnittstelle finden Sie unter Dataform CLI verwenden
- Informationen zum manuellen Auslösen von Ausführungen finden Sie unter Ausführung auslösen: