Auf dieser Seite finden Sie Best Practices für die Verwendung von Datastream und Dataflow zum Streamen von Daten in BigQuery.
Replikat-Datasets mit benutzerdefinierten Schlüsseln partitionieren
Das Staging-Dataset in BigQuery wird automatisch partitioniert. Standardmäßig wird das Replikat-Dataset jedoch nicht partitioniert, da die Partitionsschlüssel für die Replikat-Tabellen auf Grundlage einer bestimmten Geschäftslogik definiert werden müssen und nicht von Datastream und Dataflow erzwungen werden.
Für jede Tabelle im Replikat-Dataset, die partitioniert werden muss:
Führen Sie das folgende SQL-Skript für jede Tabelle im Replikat-Dataset mit dem SQL-Editor in BigQuery aus. In diesem Beispiel hat die Tabelle
actorim Datasetdatastream_cdceine Spaltelast_update, die wir als Partitionsschlüssel festlegen möchten. Wenn Sie das Script ausführen, wird die Tabelle mit dem richtigen Partitionierungsschlüssel neu erstellt.create table '[BigQuery_PROJECT_ID].datastream_cdc.actor_new'
partition by date(last_update) as SELECT * FROM '[BigQuery_PROJECT_ID].datastream_cdc.actor' drop table '[BigQuery_PROJECT_ID].datastream_cdc.actor' alter table '[BigQuery_PROJECT_ID].datastream_cdc.actor_new' rename to 'actor' Verwenden Sie die Vorlage „Datastream zu BigQuery“, um einen Dataflow-Job neu zu erstellen.
Benutzerdefinierte Funktionen zum Bearbeiten von Ereignisdaten ausführen
Sie können die Vorlage „Datastream zu BigQuery“ verwenden, um eine benutzerdefinierte JavaScript-Funktion auszuführen. Dazu müssen Sie zuerst eine Datei mit der Funktion an einem bestimmten Speicherort in Cloud Storage ablegen. Gehen Sie anschließend so vor:
- Verwenden Sie den Parameter
javascriptTextTransformGcsPathin der Vorlage, um den Speicherort der Datei in Cloud Storage anzugeben, die Ihre benutzerdefinierte Funktion enthält. - Verwenden Sie den Parameter
javascriptTextTransformFunctionName, um den Namen der JavaScript-Funktion anzugeben, die Sie als benutzerdefinierte Funktion aufrufen möchten.
Sie können beispielsweise eine benutzerdefinierte Funktion ausführen, um gelöschte Datensätze in den Tabellen des Replikat-Datasets in BigQuery beizubehalten. Dieser Vorgang wird als „vorläufiges Löschen“ bezeichnet.
Erstellen Sie dazu eine Funktion, die den Wert der Spalte _metadata_deleted in eine neue Spalte mit dem Namen is_deleted kopiert und dann den Wert der Spalte _metadata_deleted auf false zurücksetzt. Dadurch werden die Löschereignisse vom Dataflow-Job ignoriert und die gelöschten Datensätze bleiben beim Aktualisieren des Replikatdatasets in BigQuery erhalten.
Hier ist der Beispielcode für diese benutzerdefinierte Funktion:
/** * This function changes the behavior of the Datastream to * BigQuery template to allow soft deletes. * @param {string} messageString from