本頁面說明 Datastream 如何將各種來源資料庫的資料類型,對應至相應的 BigQuery 資料類型。瞭解將資料遷移至 BigQuery 時,不同資料類型如何轉換、BigQuery 如何表示 MongoDB 二進位 JSON (BSON) 文件,以及如何以 BigQuery ARRAY 資料類型查詢 PostgreSQL 陣列資料。
地圖資料類型
下表列出從支援的來源資料庫到 BigQuery 目的地的資料類型轉換。
| 來源資料庫 | 來源資料類型 | 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) |
如果精確度值 ≤ 38,且比例值 ≤ 9,則為 NUMERIC。否則為 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或LONG RAW |
UNSUPPORTED |
| Oracle | NCHAR |
STRING |
| Oracle | NCLOB |
STRING |
| Oracle | NUMBER(precision, scale>0) |
如果 0 < precision ≤ 78,則對應至參數化小數類型。如果精確度 ≥ 79,則對應至 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 |
如果 precision = -1,則 STRING (BigQuery NUMERIC 類型需要固定精確度)。否則為 BIGNUMERIC 或 NUMERIC。詳情請參閱 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 |
如果量表值 ≤ 9 且 (precision - scale) 值 ≤ 29,則 NUMERIC。否則為 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 |
如果量表值 ≤ 9 且 (precision - scale) 值 ≤ 29,則 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 |
| 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(可以是 STRING、DATE、NUMBER 或 BOOLEAN) |
STRING |
| Salesforce | COMBOBOX |
STRING |
| Salesforce | CURRENCY |
FLOAT64
長度上限為 18 位數。 |
| Salesforce | DATACATEGORYGROUPREFERENCE |
STRING |
| Salesforce | EMAIL |
STRING |
| Salesforce | ENCRYPTEDSTRING |
STRING |
| Salesforce | ID |
STRING |
| Salesforce | JUNCTIONIDLIST |
STRING |
| Salesforce | MASTERRECORD |
STRING |
| Salesforce | MULTIPICKLIST |
STRING |
| Salesforce | PERCENT |
FLOAT64
長度上限為 18 位數。 |
| Salesforce | PHONE |
STRING |
| Salesforce | PICKLIST |
STRING |
| Salesforce | REFERENCE |
STRING |
| Salesforce | TEXTAREA |
STRING
長度上限為 255 個字元。 |
| 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 |
MongoDB 資料型別
系統會以兩種模式之一將 MongoDB 二進位 JSON (BSON) 文件寫入 BigQuery,具體模式取決於您在建立串流時指定的模式 (請參閱「管理串流」):標準模式 (預設) 或嚴格模式。
- 標準模式 (預設):新式且更具描述性的格式,以資料保真度為優先。這可確保每個 BSON 型別都會明確標示,例如區分 32 位元和 64 位元整數,避免資料交換時失去精確度。標準模式可能比嚴格模式稍慢,但支援所有資料類型。詳情請參閱 MongoDB Extended JSON。
- 嚴格模式:舊版格式,旨在與 JSON 剖析器相容,並使用特定慣例 (例如
"$date") 代表標準 JSON 中不存在的型別。系統不支援特定資料類型,例如Infinity、-Infinity和NaN。詳情請參閱「MongoDB Extended JSON (v1)」。
下表顯示 BigQuery 在兩種模式下如何表示資料類型,以及範例值:
| BSON 資料類型 | 範例值 | 標準模式 | 嚴格模式 |
|---|---|---|---|
DOUBLE |
3.1415926535 |
{"$numberDouble":"3.1415926535"} |
3.1415926535 |
Infinity |
Infinity |
{"$numberDouble":"Infinity"} |
不支援 |
-Infinity |
-Infinity |
{"$numberDouble":"-Infinity"} |
不支援 |
NaN |
NaN |
{"$numberDouble":"NaN"} |
不支援 |
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}} |
以 BigQuery 陣列資料型別查詢 PostgreSQL 陣列
如要將 PostgreSQL 陣列查詢為 BigQuery ARRAY 資料類型,請使用 BigQuery JSON_VALUE_ARRAY 函數將 JSON 值轉換為 BigQuery 陣列:
SELECT ARRAY( SELECT CAST(element AS TYPE) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME, '$')) AS element ) AS array_col
更改下列內容:
- TYPE:與 PostgreSQL 來源陣列中的元素類型相符的 BigQuery 類型。舉例來說,如果來源類型是
BIGINT值陣列,請將 TYPE 替換為INT64。如要進一步瞭解如何對應資料類型,請參閱「對應資料類型」一文。 - BQ_COLUMN_NAME:BigQuery 資料表中相關資料欄的名稱。
轉換值的方式有兩種例外情況:
如要處理來源資料欄中的
BIT、BIT_VARYING或BYTEA值陣列,請執行下列查詢:SELECT ARRAY( SELECT FROM_BASE64(element) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME, '$')) AS element ) AS array_of_bytes
如要處理來源資料欄中的
JSON或JSONB值陣列,請使用JSON_QUERY_ARRAY函式:SELECT ARRAY( SELECT element FROM UNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME, '$')) AS element ) AS array_of_jsons