本頁面說明各種來源資料庫的資料類型,如何對應至 BigQuery 資料類型。瞭解將資料遷移至 BigQuery 時,不同資料類型的轉換方式;BigQuery 如何表示 MongoDB 二進位 JSON 文件;以及如何以 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<p=<78,則對應至參數化十進位型別。如果 p>=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_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 | 
  
| 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 | 
  
MongoDB 資料型別
MongoDB 二進位 JSON (BSON) 文件會以 MongoDB 擴充 JSON (v1) 嚴格模式格式寫入 BigQuery。下表顯示 BigQuery 中資料類型的表示方式,以及範例值。
| 來源資料類型 | 範例值 | BigQuery JSON 類型值 | 
|---|---|---|
DOUBLE | 
3.1415926535
 | 
3.1415926535 | 
STRING | "Hello, MongoDB!" | "Hello, MongoDB!" | 
ARRAY | 
     | ["item1",123,true,{"subItem":"object in array"}] | 
BINARY DATA | 
new BinData(0, "SGVsbG8gQmluYXJ5IERhdGE=") | 
{"$binary":"SGVsbG8gQmluYXJ5IERhdGE=","$type":"00"} | 
BOOLEAN | true | true | 
DATE | 
2024-12-25T10:30:00.000+00:00
 | 
{"$date": 1735122600000}
 | 
NULL | null | null | 
REGEX | /^mongo(db)?$/i | {"$options":"i","$regex":"^mongo(db)?$"} | 
JAVASCRIPT | function() {return this.stringField.length;} | {"$code":"function() {\n return this.stringField.length;\n }"} | 
DECIMAL128 | NumberDecimal("1234567890.1234567890") | {"$numberDecimal":"1234567890.1234567890"} | 
OBJECTID | ObjectId('673c5d8dbfe2e51808cc2c3d') | {"$oid": "673c5d8dbfe2e51808cc2c3d"} | 
LONG | 3567587327 | {"$numberLong": "3567587327"} | 
INT32 | 42 | 42 | 
INT64 | 1864712049423024127 | {"$numberLong": "1864712049423024127"} | 
TIMESTAMP | new Timestamp(1747888877, 1) | {"$timestamp":{"i":1,"t":1747888877}} | 
以 BigQuery 陣列資料類型查詢 PostgreSQL 陣列
如要以 BigQuery ARRAY 資料類型查詢 PostgreSQL 陣列,可以使用 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 資料表中的相關資料欄名稱。
轉換值的方式有 2 種例外情況:
如要查詢來源資料欄中的
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