Nesta página, descrevemos como o Datastream mapeia tipos de dados de vários bancos de dados de origem para os tipos de dados correspondentes do BigQuery. Saiba como
diferentes tipos de dados são convertidos ao migrar dados para o BigQuery,
como o BigQuery representa documentos JSON binários (BSON) do MongoDB e
como consultar dados de matriz do PostgreSQL como um tipo de dados ARRAY do
BigQuery.
Mapear tipos de dados
A tabela a seguir lista as conversões de tipo de dados de bancos de dados de origem compatíveis para o destino do BigQuery.
| Banco de dados de origem | Tipo de dados de origem | Tipo de dados do 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) |
Se o valor de precisão for ≤ 38 e o valor de escala for ≤ 9, então NUMERIC. Caso contrário, 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 |
|
|
| 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) |
Se 0 < precisão ≤ 78, mapeie para tipos decimais parametrizados. Se a precisão for maior ou igual a 79, mapeie para 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 |
Se a precisão for igual a -1, então STRING (os tipos NUMERIC do BigQuery exigem precisão fixa). Caso contrário, BIGNUMERIC ou NUMERIC. Para mais informações, consulte a seção Números de precisão arbitrária na documentação do 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 |
Se o valor da escala for ≤ 9 e o valor de (precision - scale) for ≤ 29, então NUMERIC. Caso contrário, 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 |
Se o valor da escala for ≤ 9 e o valor de (precision - scale) for ≤ 29, então NUMERIC. Caso contrário, 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(pode ser STRING,
DATE, NUMBER ou BOOLEAN) |
STRING |
| Salesforce | COMBOBOX |
STRING |
| Salesforce | CURRENCY |
FLOAT64
O tamanho máximo permitido é de 18 dígitos. |
| Salesforce | DATACATEGORYGROUPREFERENCE |
STRING |
| Salesforce | EMAIL |
STRING |
| Salesforce | ENCRYPTEDSTRING |
STRING |
| Salesforce | ID |
STRING |
| Salesforce | JUNCTIONIDLIST |
STRING |
| Salesforce | MASTERRECORD |
STRING |
| Salesforce | MULTIPICKLIST |
STRING |
| Salesforce | PERCENT |
FLOAT64
O tamanho máximo permitido é de 18 dígitos. |
| Salesforce | PHONE |
STRING |
| Salesforce | PICKLIST |
STRING |
| Salesforce | REFERENCE |
STRING |
| Salesforce | TEXTAREA |
STRING
O comprimento máximo permitido é de 255 caracteres. |
| 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 |
Tipos de dados do MongoDB
Os documentos JSON binários (BSON) do MongoDB são gravados no BigQuery em um de dois modos, dependendo do que você especifica durante a criação do stream (consulte Gerenciar streams): modo canônico (padrão) ou modo estrito.
- Modo canônico (padrão): o formato moderno e mais descritivo que prioriza a fidelidade dos dados. Ele garante que cada tipo BSON seja explicitamente rotulado, por exemplo, que ele distinga entre um inteiro de 32 bits e 64 bits para evitar perda de precisão durante a troca de dados. O modo canônico pode ser um pouco mais lento que o modo estrito, mas oferece suporte a todos os tipos de dados. Para mais informações, consulte JSON estendido do MongoDB.
- Modo estrito: um formato legado projetado para ser compatível com analisadores JSON, usando convenções específicas, como
"$date", para representar tipos que não existem no JSON padrão. Alguns tipos de dados, comoInfinity,-InfinityeNaN, não são compatíveis. Para mais informações, consulte JSON estendido do MongoDB (v1).
A tabela a seguir mostra como os tipos de dados são representados no BigQuery nos dois modos, além de exemplos de valores:
| Tipo de dados BSON | Valor de exemplo | Modo canônico | Modo restrito |
|---|---|---|---|
DOUBLE |
3.1415926535 |
{"$numberDouble":"3.1415926535"} |
3.1415926535 |
Infinity |
Infinity |
{"$numberDouble":"Infinity"} |
Sem suporte |
-Infinity |
-Infinity |
{"$numberDouble":"-Infinity"} |
Não compatível |
NaN |
NaN |
{"$numberDouble":"NaN"} |
Sem suporte |
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}} |
Consultar uma matriz do PostgreSQL como um tipo de dados de matriz do BigQuery
Para consultar uma matriz do PostgreSQL como um
tipo de dados ARRAY do BigQuery,
converta os valores JSON em uma matriz do BigQuery usando a
função
JSON_VALUE_ARRAY
do BigQuery:
SELECT ARRAY( SELECT CAST(element AS TYPE) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME, '$')) AS element ) AS array_col
Substitua:
- TYPE: o tipo do BigQuery que corresponde ao tipo do elemento na matriz de origem do PostgreSQL. Por exemplo, se o tipo de origem for uma matriz de valores
BIGINT, substitua TYPE porINT64. Para mais informações sobre como mapear os tipos de dados, consulte Mapear tipos de dados. - BQ_COLUMN_NAME: o nome da coluna relevante na tabela do BigQuery.
Há duas exceções à forma de converter os valores:
Para matrizes de valores
BIT,BIT_VARYINGouBYTEAna coluna de origem, execute a seguinte consulta:SELECT ARRAY( SELECT FROM_BASE64(element) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME, '$')) AS element ) AS array_of_bytes
Para matrizes de valores
JSONouJSONBna coluna de origem, use a funçãoJSON_QUERY_ARRAY:SELECT ARRAY( SELECT element FROM UNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME, '$')) AS element ) AS array_of_jsons