Cette page explique comment configurer votre destination BigQuery pour diffuser des données à partir d'une base de données source à l'aide de Datastream.
Configurer les ensembles de données de destination
Lorsque vous configurez des ensembles de données pour la destination BigQuery, vous pouvez sélectionner l'une des options suivantes:
Ensemble de données pour chaque schéma: l'ensemble de données est sélectionné ou créé dans l'emplacement BigQuery spécifié, en fonction du nom du schéma de la source. Par conséquent, pour chaque schéma de la source, Datastream crée automatiquement un ensemble de données dans BigQuery.
Par exemple, si vous disposez d'une source MySQL et que cette source contient une base de données
mydb
et une tableemployees
, Datastream crée l'ensemble de donnéesmydb
et la tableemployees
dans BigQuery.Si vous sélectionnez cette option, Datastream crée des ensembles de données dans le projet contenant le flux. Bien que vous n'ayez pas besoin de créer les ensembles de données dans la même région que votre flux, nous vous recommandons de regrouper toutes les ressources du flux, ainsi que les ensembles de données, dans la même région pour optimiser les coûts et les performances.
Ensemble de données unique pour tous les schémas: vous pouvez sélectionner un ensemble de données BigQuery pour le flux. Datastream diffuse toutes les données dans cet ensemble de données. Pour l'ensemble de données que vous sélectionnez, Datastream crée toutes les tables au format
<schema>_<table>
.Par exemple, si vous disposez d'une source MySQL et que cette source contient une base de données
mydb
et une tableemployees
, Datastream crée la tablemydb_employees
dans l'ensemble de données que vous sélectionnez.
Comportement d'écriture
La taille maximale d'un événement lorsque vous insérez des données en flux continu dans BigQuery est de 20 Mo.
Lorsque vous configurez votre flux, vous pouvez sélectionner la manière dont Datastream écrit vos données de modification dans BigQuery. Pour en savoir plus, consultez la section Configurer le mode d'écriture.
Configurer le mode d'écriture
Vous pouvez utiliser deux modes pour définir la manière dont vous souhaitez écrire vos données dans BigQuery:
- Fusion: il s'agit du mode d'écriture par défaut. Lorsque cette option est sélectionnée, BigQuery reflète la façon dont vos données sont stockées dans la base de données source. Cela signifie que Datastream écrit toutes les modifications apportées à vos données dans BigQuery, puis que BigQuery consolide les modifications avec les données existantes, créant ainsi des tables finales qui sont des répliques des tables sources. En mode Fusionner, aucun historique des événements de modification n'est conservé. Par exemple, si vous insérez une ligne, puis la mettez à jour, BigQuery ne conserve que les données mises à jour. Si vous supprimez ensuite la ligne de la table source, BigQuery ne conserve plus aucun enregistrement de cette ligne.
- Ajout uniquement: le mode d'écriture en mode ajout uniquement vous permet d'ajouter des données à BigQuery en tant que flux de modifications (événements
INSERT
,UPDATE-INSERT
,UPDATE-DELETE
etDELETE
). Utilisez ce mode lorsque vous devez conserver l'état historique de vos données. Pour mieux comprendre le mode d'écriture en mode ajout uniquement, considérez les scénarios suivants :- Remplissage initial: après le remplissage initial, tous les événements sont écrits dans BigQuery en tant qu'événements de type
INSERT
, avec le même code temporel, le même identifiant unique universel (UUID) et le même numéro de séquence de modification. - Mise à jour de la clé primaire: lorsqu'une clé primaire change, deux lignes sont écrites dans BigQuery :
- Une ligne
UPDATE-DELETE
avec la clé primaire d'origine - Une ligne
UPDATE-INSERT
avec la nouvelle clé primaire
- Une ligne
- Mise à jour de ligne: lorsque vous mettez à jour une ligne, une seule ligne
UPDATE-INSERT
est écrite dans BigQuery. - Suppression de ligne: lorsque vous supprimez une ligne, une seule ligne
DELETE
est écrite dans BigQuery.
- Remplissage initial: après le remplissage initial, tous les événements sont écrits dans BigQuery en tant qu'événements de type
Métadonnées de table
Datastream ajoute une colonne STRUCT
nommée datastream_metadata
à chaque table écrite dans la destination BigQuery.
Mode d'écriture de fusion
Si une table comporte une clé primaire à la source, la colonne contient les champs suivants:
UUID
: ce champ a le type de donnéesSTRING
.SOURCE_TIMESTAMP
: ce champ a le type de donnéesINTEGER
.
Si une table ne comporte pas de clé primaire, la colonne contient un champ supplémentaire: IS_DELETED
. Ce champ a le type de données BOOLEAN
et indique si les données que Datastream lit en continu vers la destination sont associées à une opération DELETE
à la source. Les tables sans clé primaire sont en mode ajout uniquement.
Mode d'écriture en mode ajout uniquement
La colonne datastream_metadata
contient les mêmes champs pour les tables avec et sans clés primaires:
UUID
: ce champ a le type de donnéesSTRING
.SOURCE_TIMESTAMP
: ce champ a le type de donnéesINTEGER
.CHANGE_SEQUENCE_NUMBER
: ce champ a le type de donnéesSTRING
. Il s'agit d'un numéro de séquence interne utilisé par Datastream pour chaque événement de modification.CHANGE_TYPE
: ce champ a le type de donnéesSTRING
. Indique le type d'événement de modification:INSERT
,UPDATE-INSERT
,UPDATE-DELETE
ouDELETE
.SORT_KEYS
: ce champ contient un tableau de valeursSTRING
. Vous pouvez utiliser ces valeurs pour trier les événements de modification.
Utiliser des tables BigQuery avec l'option max_staleness
Dans le cadre de l'ingestion en temps quasi réel, Datastream utilise la prise en charge intégrée de BigQuery pour les opérations d'insertion, telles que la mise à jour, l'insertion et la suppression de données. Les opérations Upsert vous permettent de mettre à jour dynamiquement la destination BigQuery à mesure que des lignes sont ajoutées, modifiées ou supprimées. Datastream diffuse ces opérations d'insertion et de mise à jour dans la table de destination à l'aide de l'API Storage Write de BigQuery.
Spécifier la limite d'obsolescence des données
BigQuery applique les modifications de la source en arrière-plan de manière continue ou au moment de l'exécution de la requête, en fonction de la limite d'obsolescence des données configurée. Lorsque Datastream crée une table dans BigQuery, l'option max_staleness
de la table est définie en fonction de la valeur actuelle de la limite d'obsolescence des données pour le flux.
Pour en savoir plus sur l'utilisation des tables BigQuery avec l'option max_staleness
, consultez Obsolescence des tables.
Contrôler les coûts BigQuery
Les coûts BigQuery sont facturés séparément de Datastream. Pour savoir comment contrôler vos coûts BigQuery, consultez la page Tarifs de la CDC BigQuery.
Types de données cartographiques
Le tableau suivant liste les conversions de types de données des bases de données sources compatibles vers la destination BigQuery.
Base de données source | Type de données source | Type de données BigQuery |
---|---|---|
MySQL | BIGINT(size) |
LONG |
MySQL | BIGINT (unsigned) |
DECIMAL |
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) |
Si la valeur de précision est inférieure ou égale à 38 et que la valeur d'échelle est inférieure ou égale à 9, NUMERIC . Sinon, 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 | INTEGER (unsigned) |
LONG |
MySQL |
|
JSON
|
MySQL | LONGBLOB |
STRING (hex encoded) |
MySQL | LONGTEXT |
STRING |
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) |
Si 0< p< 78, mappez sur des types décimaux paramétrés. Si p>=79, mappez sur STRING |
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 |
Si "precision" = -1 , alors STRING (les types NUMERIC BigQuery nécessitent une précision fixe). Sinon, BIGNUMERIC /NUMERIC . Pour en savoir plus, consultez la section Nombres à précision arbitraire dans la documentation PostgreSQL. |
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 |
Interroger un tableau PostgreSQL en tant que type de données de tableau BigQuery
Si vous préférez interroger un tableau PostgreSQL en tant que type de données ARRAY
BigQuery, vous pouvez convertir les valeurs JSON
en tableau BigQuery à l'aide de la fonction JSON_VALUE_ARRAY
de BigQuery:
SELECT ARRAY(SELECT CAST(element AS TYPE) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)AS array_col
Remplacez les éléments suivants :
TYPE: type BigQuery correspondant au type d'élément dans le tableau source PostgreSQL. Par exemple, si le type de source est un tableau de valeurs
BIGINT
, remplacez TYPE parINT64
.Pour en savoir plus sur le mappage des types de données, consultez la section Mapper les types de données.
BQ_COLUMN_NAME: nom de la colonne appropriée dans la table BigQuery.
Il existe deux exceptions à la façon dont vous convertissez les valeurs:
Pour les tableaux de valeurs
BIT
,BIT_VARYING
ouBYTEA
dans la colonne source, exécutez la requête suivante:SELECT ARRAY(SELECT FROM_BASE64(element) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_bytes Pour les tableaux de valeurs
JSON
ouJSONB
dans la colonne source, utilisez la fonctionJSON_QUERY_ARRAY
:SELECT ARRAY(SELECT element FROM UNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME,'$')) AS element)
AS array_of_jsons
Limitations connues
Les limites connues d'utilisation de BigQuery en tant que destination incluent les suivantes:
- Vous ne pouvez répliquer des données que dans un ensemble de données BigQuery qui se trouve dans le même Google Cloud projet que le flux Datastream.
- Par défaut, Datastream n'autorise pas l'ajout d'une clé primaire à une table déjà répliquée dans BigQuery sans clé primaire, ni la suppression d'une clé primaire d'une table répliquée dans BigQuery avec une clé primaire. Si vous devez effectuer de telles modifications, contactez l'assistance Google. Pour savoir comment modifier la définition de la clé primaire d'une table source qui en possède déjà une, consultez Diagnostiquer les problèmes.
Les clés primaires dans BigQuery doivent être de type de données:
DATE
BOOL
GEOGRAPHY
INT64
NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
DATETIME
Les tables contenant des clés primaires de types de données non compatibles ne sont pas répliquées par Datastream.
BigQuery n'accepte pas les noms de table contenant les caractères
.
,$
,/
,@
ou+
. Datastream remplace ces caractères par des traits de soulignement lors de la création de tables de destination.Par exemple,
table.name
dans la base de données source devienttable_name
dans BigQuery.Pour en savoir plus sur les noms de tables dans BigQuery, consultez la section Nommer les tables.
- BigQuery n'accepte pas plus de quatre colonnes de clustering. Lorsque vous répliquez une table comportant plus de quatre colonnes de clé primaire, Datastream utilise quatre colonnes de clé primaire comme colonnes de clustering.
- Datastream mappe les valeurs littérales de date et d'heure hors plage, telles que les types de date infinis PostgreSQL, aux valeurs suivantes :
DATE
positif à la valeur de9999-12-31
DATE
négatif à la valeur de0001-01-01
TIMESTAMP
positif à la valeur de9999-12-31 23:59:59.999000 UTC
TIMESTAMP
négatif à la valeur de0001-01-01 00:00:00 UTC
- BigQuery n'est pas compatible avec les tables de streaming dont les clés primaires sont de type
FLOAT
ouREAL
. Ces tables ne sont pas répliquées.
Pour en savoir plus sur les types et les plages de dates BigQuery, consultez Types de données.
Étape suivante
- Découvrez comment répliquer les données d'une base de données source vers des ensembles de données BigQuery à l'aide de Datastream.