Cette page décrit comment Datastream mappe les types de données de différentes bases de données sources à leurs types de données BigQuery correspondants. Découvrez comment les différents types de données sont convertis lorsque vous migrez des données vers BigQuery, comment BigQuery représente les documents JSON binaires (BSON) MongoDB et comment interroger les données de tableau PostgreSQL en tant que type de données ARRAY BigQuery.
Mapper les types de données
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) |
INT64 |
| 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 ≤ 38 et la valeur d'échelle est ≤ 9, alors NUMERIC. Dans le cas contraire, cette valeur est définie sur 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) |
INT64 |
| 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 |
UNSUPPORTED |
| 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 ou LONG RAW |
UNSUPPORTED |
| Oracle | NCHAR |
STRING |
| Oracle | NCLOB |
STRING |
| Oracle | NUMBER(precision, scale>0) |
Si 0 < précision ≤ 78, mappez les types décimaux paramétrés. Si la précision est supérieure ou égale à 79, mappez-la 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 |
UNSUPPORTED |
| 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 la précision est égale à -1, alors STRING (les types NUMERIC BigQuery nécessitent une précision fixe). Sinon, BIGNUMERIC ou NUMERIC. Pour en savoir plus, consultez la section Nombres de 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 TIME ZONE |
TIMESTAMP |
| PostgreSQL | TIME WITH TIME ZONE |
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 |
Si la valeur de l'échelle est ≤ 9 et que la valeur (precision - scale) est ≤ 29, alors NUMERIC. Sinon, BIGNUMERIC. |
| SQL Server | FLOAT |
FLOAT64 |
| SQL Server | IMAGE |
BYTES |
| SQL Server | INT |
INT64 |
| SQL Server | MONEY |
NUMERIC |
| SQL Server | NCHAR |
STRING |
| SQL Server | NTEXT |
STRING |
| SQL Server | NUMERIC |
Si la valeur de l'échelle est ≤ 9 et que la valeur (precision - scale) est ≤ 29, alors NUMERIC. Sinon, 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 ou 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 |
| Salesforce | BOOLEAN |
BOOLEAN |
| Salesforce | BYTE |
BYTES |
| Salesforce | DATE |
DATE |
| Salesforce | DATETIME |
DATETIME |
| Salesforce | DOUBLE |
BIGNUMERIC |
| Salesforce | INT |
INT64 |
| Salesforce | STRING |
STRING |
| Salesforce | TIME |
TIME |
| Salesforce | ANYTYPE(peut être STRING,
DATE, NUMBER ou BOOLEAN) |
STRING |
| Salesforce | COMBOBOX |
STRING |
| Salesforce | CURRENCY |
FLOAT64
La longueur maximale autorisée est de 18 chiffres. |
| Salesforce | DATACATEGORYGROUPREFERENCE |
STRING |
| Salesforce | EMAIL |
STRING |
| Salesforce | ENCRYPTEDSTRING |
STRING |
| Salesforce | ID |
STRING |
| Salesforce | JUNCTIONIDLIST |
STRING |
| Salesforce | MASTERRECORD |
STRING |
| Salesforce | MULTIPICKLIST |
STRING |
| Salesforce | PERCENT |
FLOAT64
La longueur maximale autorisée est de 18 chiffres. |
| Salesforce | PHONE |
STRING |
| Salesforce | PICKLIST |
STRING |
| Salesforce | REFERENCE |
STRING |
| Salesforce | TEXTAREA |
STRING
La longueur maximale autorisée est de 255 caractères. |
| Salesforce | URL |
STRING |
| Spanner (GoogleSQL) | ARRAY |
JSON |
| Spanner (GoogleSQL) | BOOL |
BOOLEAN |
| Spanner (GoogleSQL) | BYTES |
BYTES |
| Spanner (GoogleSQL) | DATE |
DATE |
| Spanner (GoogleSQL) | FLOAT32 |
FLOAT64 |
| Spanner (GoogleSQL) | FLOAT64 |
FLOAT64 |
| Spanner (GoogleSQL) | INT64 |
INT64 |
| Spanner (GoogleSQL) | JSON |
JSON |
| Spanner (GoogleSQL) | NUMERIC |
STRING |
| Spanner (GoogleSQL) | STRING |
STRING |
| Spanner (GoogleSQL) | TIMESTAMP |
TIMESTAMP WITH TIME ZONE |
| Spanner (GoogleSQL) | UUID |
STRING |
| Spanner (GoogleSQL) | PROTO |
UNSUPPORTED |
| Spanner (GoogleSQL) | ENUM |
UNSUPPORTED |
| Spanner (PostgreSQL) | ARRAY |
JSON |
| Spanner (PostgreSQL) | BIGINT |
INT64 |
| Spanner (PostgreSQL) | BOOL |
BOOLEAN |
| Spanner (PostgreSQL) | BYTEA |
BYTES |
| Spanner (PostgreSQL) | DATE |
DATE |
| Spanner (PostgreSQL) | DECIMAL |
STRING |
| Spanner (PostgreSQL) | DOUBLE PRECISION |
FLOAT64 |
| Spanner (PostgreSQL) | FLOAT8 |
FLOAT64 |
| Spanner (PostgreSQL) | INT8 |
INT64 |
| Spanner (PostgreSQL) | JSONB |
JSON |
| Spanner (PostgreSQL) | NUMERIC |
STRING |
| Spanner (PostgreSQL) | TIMESTAMP WITH TIME ZONE |
TIMESTAMP WITH TIME ZONE |
| Spanner (PostgreSQL) | TIMESTAMPZ |
TIMESTAMP WITH TIME ZONE |
| Spanner (PostgreSQL) | UUID |
STRING |
| Spanner (PostgreSQL) | VARCHAR |
STRING |
Types de données MongoDB
Les documents JSON binaires (BSON) MongoDB sont écrits dans BigQuery dans l'un des deux modes suivants, selon ce que vous spécifiez lors de la création du flux (voir Gérer les flux) : mode canonique (par défaut) ou mode strict.
- Mode canonique (par défaut) : format moderne et plus descriptif qui privilégie la fidélité des données. Il garantit que chaque type BSON est explicitement étiqueté (par exemple, il fait la distinction entre un entier de 32 bits et un entier de 64 bits) pour éviter toute perte de précision lors de l'échange de données. Le mode canonique peut être légèrement plus lent que le mode strict, mais il prend en charge tous les types de données. Pour en savoir plus, consultez MongoDB Extended JSON.
- Mode strict : format hérité conçu pour être compatible avec les analyseurs JSON, utilisant des conventions spécifiques, telles que
"$date", pour représenter les types qui n'existent pas dans le format JSON standard. Certains types de données, tels queInfinity,-InfinityetNaN, ne sont pas acceptés. Pour en savoir plus, consultez MongoDB Extended JSON (v1).
Le tableau suivant montre comment les types de données sont représentés dans BigQuery dans les deux modes, avec des exemples de valeurs :
| Type de données BSON | Exemple de valeur | Mode canonique | Mode Strict |
|---|---|---|---|
DOUBLE |
3.1415926535 |
{"$numberDouble":"3.1415926535"} |
3.1415926535 |
Infinity |
Infinity |
{"$numberDouble":"Infinity"} |
Non compatible |
-Infinity |
-Infinity |
{"$numberDouble":"-Infinity"} |
Non compatible |
NaN |
NaN |
{"$numberDouble":"NaN"} |
Non compatible |
STRING |
"Hello, MongoDB!" |
"Hello, MongoDB!" |
"Hello, MongoDB!" |
ARRAY |
|
["item1",{"$numberInt":"123"},true,{"subItem":"object in array"}]
|
["item1",123,true,{"subItem":"object in array"}] |
BINARY DATA |
new BinData(0, "SGVsbG8gQmluYXJ5IERhdGE=") |
{"$binary":{"base64":"SGVsbG8gQmluYXJ5IERhdGE=","subType":"00"}}
|
{"$binary":"SGVsbG8gQmluYXJ5IERhdGE=","$type":"00"} |
BOOLEAN |
true |
true |
true |
DATE |
2024-12-25T10:30:00.000+00:00 |
{"$date":{"$numberLong":"1735122600000"}} |
{"$date": 1735122600000} |
NULL |
null |
null |
null |
REGEX |
/^mongo(db)?$/i |
{"$regularExpression":{"pattern":"^mongo(db)?$","options":"i"}}
|
{"$options":"i","$regex":"^mongo(db)?$"} |
JAVASCRIPT |
function() {return this.stringField.length;} |
{"$code":"function() {\n return this.stringField.length;\n }"}
|
{"$code":"function() {\n return this.stringField.length;\n }"}
|
DECIMAL128 |
NumberDecimal("1234567890.1234567890") |
{"$numberDecimal":"1234567890.1234567890"} |
{"$numberDecimal":"1234567890.1234567890"} |
OBJECTID |
ObjectId('673c5d8dbfe2e51808cc2c3d') |
{"$oid": "673c5d8dbfe2e51808cc2c3d"} |
{"$oid": "673c5d8dbfe2e51808cc2c3d"} |
LONG |
3567587327 |
{"$numberLong": "3567587327"} |
{"$numberLong": "3567587327"} |
INT32 |
42 |
{"$numberInt": "42"} |
42 |
INT64 |
1864712049423024127 |
{"$numberLong": "1864712049423024127"} |
{"$numberLong": "1864712049423024127"} |
TIMESTAMP |
new Timestamp(1747888877, 1) |
{"$timestamp":{"t":1747888877,"i":1}} |
{"$timestamp":{"i":1,"t":1747888877}} |
Interroger un tableau PostgreSQL en tant que type de données de tableau BigQuery
Pour interroger un tableau PostgreSQL en tant que type de données ARRAY BigQuery, convertissez les valeurs JSON en tableau BigQuery à l'aide de la fonction BigQuery JSON_VALUE_ARRAY :
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 Mapper les types de données. - BQ_COLUMN_NAME : nom de la colonne concernée dans la table BigQuery.
Il existe deux exceptions à la façon dont vous convertissez les valeurs :
Pour les tableaux de valeurs
BIT,BIT_VARYINGouBYTEAdans 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
JSONouJSONBdans 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