Auf dieser Seite wird beschrieben, wie Sie Ihr BigQuery-Ziel konfigurieren, um Daten mit Datastream aus einer Quelldatenbank zu streamen.
Ziel-Datasets konfigurieren
Wenn Sie Datasets für das BigQuery-Ziel konfigurieren, können Sie eine der folgenden Optionen auswählen:
Dataset für jedes Schema: Das Dataset wird am angegebenen BigQuery-Standort basierend auf dem Schemanamen der Quelle ausgewählt oder erstellt. Daher erstellt Datastream für jedes Schema in der Quelle automatisch ein Dataset in BigQuery.
Wenn Sie diese Option auswählen, erstellt Datastream Datasets in dem Projekt, das den Stream enthält.
Wenn Sie beispielsweise eine MySQL-Quelle haben und diese eine
mydb
-Datenbank und eineemployees
-Tabelle in der Datenbank hat, erstellt Datastream dasmydb
-Dataset und dieemployees
-Tabelle in BigQuery.Einzelnes Dataset für alle Schemas: Sie können ein BigQuery-Dataset für den Stream auswählen. Datastream streamt alle Daten in dieses Dataset. Für das ausgewählte Dataset erstellt Datastream alle Tabellen als
<schema>_<table>
.Wenn Sie beispielsweise eine MySQL-Quelle haben und diese eine
mydb
-Datenbank und eineemployees
-Tabelle in der Datenbank hat, erstellt Datastream die Tabellemydb_employees
in dem von Ihnen ausgewählten Dataset.
Schreibverhalten
Datastream hängt eine STRUCT
-Spalte namens datastream_metadata
an jede Tabelle an, die in das BigQuery-Ziel geschrieben wird.
Wenn eine Tabelle in der Quelle einen Primärschlüssel hat, enthält die Spalte die folgenden Felder:
UUID:
Dieses Feld hat den Datentypstring
.SOURCE_TIMESTAMP:
Dieses Feld hat den Datentypinteger
.
Wenn eine Tabelle keinen Primärschlüssel hat, enthält die Spalte ein zusätzliches Feld: IS_DELETED
. Dieses Feld hat den Datentyp boolean
und gibt an, ob die Daten, die Datastream an das Ziel streamt, einem DELETE
-Vorgang in der Quelle zugeordnet sind. Bei Tabellen ohne Primärschlüssel können nur Daten angehängt werden.
Die maximale Ereignisgröße beim Streamen von Daten in BigQuery beträgt 20 MB.
BigQuery-Tabellen mit der Option max_staleness
verwenden
Im Rahmen der Datenaufnahme nahezu in Echtzeit verwendet Datastream die integrierte Unterstützung von BigQuery für Upsert-Vorgänge, z. B. das Aktualisieren, Einfügen und Löschen von Daten. Mit Upsert-Vorgängen können Sie das BigQuery-Ziel dynamisch aktualisieren, wenn Zeilen hinzugefügt, geändert oder gelöscht werden. Datastream streamt diese Upsert-Vorgänge mit der BigQuery Storage Write API in die Zieltabelle.
Limit für Datenveralterung angeben
Je nach konfiguriertem Limit für die Veralterung wendet BigQuery Quelländerungen laufend im Hintergrund oder bei der Abfrageausführung an. Wenn Datastream eine neue Tabelle in BigQuery erstellt, wird die Option max_staleness
der Tabelle auf den Wert des aktuellen Limits für die Datenveralterung für den Stream festgelegt.
Weitere Informationen zur Verwendung von BigQuery-Tabellen mit der Option max_staleness
finden Sie unter Veraltete Tabellen.
BigQuery-Kosten kontrollieren
Die Kosten für BigQuery werden getrennt von Datastream berechnet. Informationen zur Kontrolle Ihrer BigQuery-Kosten finden Sie unter BigQuery-CDC-Preise.
Kartendatentypen
In der folgenden Tabelle sind die Datentypkonvertierungen aus unterstützten Quelldatenbanken in das BigQuery-Ziel aufgeführt.
Quelldatenbank | Quelldatentyp | BigQuery-Datentyp |
---|---|---|
MySQL | BIGINT (unsigned) |
NUMERIC |
MySQL | BINARY(size) |
STRING (hex encoded) |
MySQL | BIT(size) |
INT64 |
MySQL | BLOB(size) |
STRING (hex encoded) |
MySQL | BOOL |
INT64 |
MySQL | CHAR(size) |
STRING |
MySQL | DATE |
DATE |
MySQL | DATETIME(fsp) |
DATETIME |
MySQL | DECIMAL(precision, scale) |
Wenn der Precision-Wert <=38 und der Skalierungswert <=9 ist, dann NUMERIC . Andernfalls BIGNUMERIC |
MySQL | DOUBLE(size, d) |
FLOAT64 |
MySQL | ENUM(val1, val2, val3, ...) |
STRING |
MySQL | FLOAT(precision) |
FLOAT64 |
MySQL | FLOAT(size, d) |
FLOAT64 |
MySQL | INTEGER(size) |
INT64 |
MySQL |
|
JSON
|
MySQL | LONGBLOB |
STRING (hex encoded) |
MySQL | LONGTEXT |
STRING (hex encoded) |
MySQL | MEDIUMBLOB |
STRING (hex encoded) |
MySQL | MEDIUMINT(size) |
INT64 |
MySQL | MEDIUMTEXT |
STRING |
MySQL | SET(val1, val2, val3, ...) |
STRING |
MySQL | SMALLINT(size) |
INT64 |
MySQL | TEXT(size) |
STRING |
MySQL | TIME(fsp) |
INTERVAL |
MySQL | TIMESTAMP(fsp) |
TIMESTAMP |
MySQL | TINYBLOB |
STRING (hex encoded) |
MySQL | TINYINT(size) |
INT64 |
MySQL | TINYTEXT |
STRING |
MySQL | VARBINARY(size) |
STRING (hex encoded) |
MySQL | VARCHAR |
STRING |
MySQL | YEAR |
INT64 |
Oracle | ANYDATA |
UNSUPPORTED |
Oracle | BFILE |
STRING |
Oracle | BINARY DOUBLE |
FLOAT64 |
Oracle | BINARY FLOAT |
FLOAT64 |
Oracle | BLOB |
BYTES |
Oracle | CHAR |
STRING |
Oracle | CLOB |
STRING |
Oracle | DATE |
DATETIME
|
Oracle | DOUBLE PRECISION |
FLOAT64 |
Oracle | FLOAT(p) |
FLOAT64 |
Oracle | INTERVAL DAY TO SECOND |
UNSUPPORTED |
Oracle | INTERVAL YEAR TO MONTH |
UNSUPPORTED |
Oracle | LONG /LONG RAW |
STRING |
Oracle | NCHAR |
STRING |
Oracle | NCLOB |
STRING |
Oracle | NUMBER(precision, scale>0) |
Wenn 0<p=<78, dann den parametrierten Dezimaltypen zugeordnet werden. Wenn p>=79 ist, ordnen Sie sie STRING zu. |
Oracle | NVARCHAR2 |
STRING |
Oracle | RAW |
STRING |
Oracle | ROWID |
STRING |
Oracle | SDO_GEOMETRY |
UNSUPPORTED |
Oracle | SMALLINT |
INT64 |
Oracle | TIMESTAMP |
TIMESTAMP
|
Oracle | TIMESTAMP WITH TIME ZONE |
TIMESTAMP
|
Oracle | UDT (user-defined type) |
UNSUPPORTED |
Oracle | UROWID |
STRING |
Oracle | VARCHAR |
STRING |
Oracle | VARCHAR2 |
STRING |
Oracle | XMLTYPE |
UNSUPPORTED |
PostgreSQL | ARRAY |
JSON
|
PostgreSQL | BIGINT |
INT64 |
PostgreSQL | BIT |
BYTES |
PostgreSQL | BIT_VARYING |
BYTES |
PostgreSQL | BOOLEAN |
BOOLEAN |
PostgreSQL | BOX |
UNSUPPORTED |
PostgreSQL | BYTEA |
BYTES |
PostgreSQL | CHARACTER |
STRING |
PostgreSQL | CHARACTER_VARYING |
STRING |
PostgreSQL | CIDR |
STRING |
PostgreSQL | CIRCLE |
UNSUPPORTED |
PostgreSQL | DATE |
DATE |
PostgreSQL | DOUBLE_PRECISION |
FLOAT64 |
PostgreSQL | ENUM |
STRING |
PostgreSQL | INET |
STRING |
PostgreSQL | INTEGER |
INT64 |
PostgreSQL | INTERVAL |
INTERVAL |
PostgreSQL | JSON |
JSON |
PostgreSQL | JSONB |
JSON |
PostgreSQL | LINE |
UNSUPPORTED |
PostgreSQL | LSEG |
UNSUPPORTED |
PostgreSQL | MACADDR |
STRING |
PostgreSQL | MONEY |
FLOAT64 |
PostgreSQL | NUMERIC |
Wenn Präzision = -1 , dann STRING , andernfalls BIGNUMERIC /NUMERIC . Weitere Informationen finden Sie unter Parametrisierte Dezimaltypen. |
PostgreSQL | OID |
INT64 |
PostgreSQL | PATH |
UNSUPPORTED |
PostgreSQL | POINT |
UNSUPPORTED |
PostgreSQL | POLYGON |
UNSUPPORTED |
PostgreSQL | REAL |
FLOAT64 |
PostgreSQL | SMALLINT |
INT64 |
PostgreSQL | SMALLSERIAL |
INT64 |
PostgreSQL | SERIAL |
INT64 |
PostgreSQL | TEXT |
STRING |
PostgreSQL | TIME |
TIME |
PostgreSQL | TIMESTAMP |
TIMESTAMP |
PostgreSQL | TIMESTAMP_WITH_TIMEZONE |
TIMESTAMP |
PostgreSQL | TIME_WITH_TIMEZONE |
TIME |
PostgreSQL | TSQUERY |
STRING |
PostgreSQL | TSVECTOR |
STRING |
PostgreSQL | TXID_SNAPSHOT |
STRING |
PostgreSQL | UUID |
STRING |
PostgreSQL | XML |
STRING |
SQL Server | BIGINT |
INT64 |
SQL Server | BINARY |
BYTES |
SQL Server | BIT |
BOOL |
SQL Server | CHAR |
STRING |
SQL Server | DATE |
DATE |
SQL Server | DATETIME2 |
DATETIME |
SQL Server | DATETIME |
DATETIME |
SQL Server | DATETIMEOFFSET |
TIMESTAMP |
SQL Server | DECIMAL |
BIGNUMERIC |
SQL Server | FLOAT |
FLOAT64 |
SQL Server | IMAGE |
BYTES |
SQL Server | INT |
INT64 |
SQL Server | MONEY |
BIGNUMERIC |
SQL Server | NCHAR |
STRING |
SQL Server | NTEXT |
STRING |
SQL Server | NUMERIC |
BIGNUMERIC |
SQL Server | NVARCHAR |
STRING |
SQL Server | NVARCHAR(MAX) |
STRING |
SQL Server | REAL |
FLOAT64 |
SQL Server | SMALLDATETIME |
DATETIME |
SQL Server | SMALLINT |
INT64 |
SQL Server | SMALLMONEY |
NUMERIC |
SQL Server | TEXT |
STRING |
SQL Server | TIME |
TIME |
SQL Server | TIMESTAMP /ROWVERSION |
BYTES |
SQL Server | TINYINT |
INT64 |
SQL Server | UNIQUEIDENTIFIER |
STRING |
SQL Server | VARBINARY |
BYTES |
SQL Server | VARBINARY(MAX) |
BYTES |
SQL Server | VARCHAR |
STRING |
SQL Server | VARCHAR(MAX) |
STRING |
SQL Server | XML |
STRING |
PostgreSQL-Array als BigQuery-Array-Datentyp abfragen
Wenn Sie ein PostgreSQL-Array lieber als BigQuery-ARRAY
-Datentyp abfragen möchten, können Sie die JSON
-Werte mithilfe der BigQuery-Funktion JSON_VALUE_ARRAY
in ein BigQuery-Array konvertieren:
SELECT ARRAY(SELECT CAST(element AS TYPE) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)AS array_col
Ersetzen Sie Folgendes:
TYPE: Der BigQuery-Typ, der mit dem Elementtyp im PostgreSQL-Quellarray übereinstimmt. Wenn der Quelltyp beispielsweise ein Array von
BIGINT
-Werten ist, ersetzen Sie TYPE durchINT64
.Weitere Informationen zum Zuordnen der Datentypen finden Sie unter Kartendatentypen.
BQ_COLUMN_NAME: der Name der entsprechenden Spalte in der BigQuery-Tabelle.
Bei der Konvertierung der Werte gibt es zwei Ausnahmen:
Führen Sie für Arrays mit
BIT
-,BIT_VARYING
- oderBYTEA
-Werten in der Quellspalte die folgende Abfrage aus:SELECT ARRAY(SELECT FROM_BASE64(element) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_bytes Verwenden Sie für Arrays mit
JSON
- oderJSONB
-Werten in der Quellspalte die FunktionJSON_QUERY_ARRAY
:SELECT ARRAY(SELECT element FROM UNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_jsons
Bekannte Einschränkungen
Bekannte Einschränkungen bei der Verwendung von BigQuery als Ziel:
- Sie können Daten nur in ein BigQuery-Dataset replizieren, das sich im selben Google Cloud-Projekt wie der Datastream-Stream befindet.
Wenn eine Tabelle in der Quelldatenbank einen Primärschlüssel hat (z. B. die Nutzer-ID) und sich dann der Primärschlüssel in der Tabelle ändert (in diesem Beispiel ist der Primärschlüssel jetzt die Nutzer-ID und das Datum), kann Datastream diese Änderung nicht in das Ziel streamen.
Führen Sie die folgenden Schritte aus, damit Datastream die Tabelle mit dem geänderten Primärschlüssel an das Ziel streamt:
- Ändern Sie den Primärschlüssel für die Quelldatenbanktabelle.
- Prüfen Sie den Messwert für die Gesamtlatenz für den Stream und warten Sie mindestens die aktuelle Latenz, damit alle laufenden Ereignisse in das Ziel geschrieben werden. So können alle Ereignisse mit dem ursprünglichen Primärschlüssel erfolgreich gestreamt werden.
- Pausiere den Stream.
- Löschen Sie die Tabelle im Ziel.
- Setze den Stream fort.
- Backfill für die Tabelle auslösen
Primärschlüssel in BigQuery müssen folgende Datentypen haben:
DATE
BOOL
GEOGRAPHY
INT64
NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
DATETIME
Tabellen, die Primärschlüssel mit nicht unterstützten Datentypen enthalten, werden von Datastream nicht repliziert.
BigQuery unterstützt keine Tabellennamen mit den Zeichen
.
,$
,/
,@
oder+
. Datastream ersetzt solche Zeichen beim Erstellen von Zieltabellen durch Unterstriche.Beispiel:
table.name
in der Quelldatenbank wird in BigQuery zutable_name
.Weitere Informationen zu Tabellennamen in BigQuery finden Sie unter Tabellennamen.
- BigQuery unterstützt nicht mehr als vier Clustering-Spalten. Beim Replizieren einer Tabelle mit mehr als vier Primärschlüsselspalten verwendet Datastream vier Primärschlüsselspalten als Clustering-Spalten.
- Datastream ordnet Datums- und Uhrzeitliterale außerhalb des Bereichs wie PostgreSQL-Datumstypen für unendliche Daten den folgenden Werten zu:
- Positive Werte für
DATE
in Wert von9999-12-31
DATE
negativ auf den Wert0001-01-01
- Positive Werte für
TIMESTAMP
in Wert von9999-12-31 23:59:59.999000 UTC
TIMESTAMP
negativ auf den Wert0001-01-01 00:00:00 UTC
- Positive Werte für
- BigQuery unterstützt keine Streamingtabellen mit Primärschlüsseln des Datentyps
FLOAT
oderREAL
. Solche Tabellen werden nicht repliziert.
Weitere Informationen zu BigQuery-Datumstypen und ‐Bereichen finden Sie unter Datentypen.