Data type mappings in BigQuery

This page describes data type mappings from various source databases to their corresponding BigQuery data types. Understand how different data types convert when migrating data to BigQuery, how BigQuery represents MongoDB binary JSON documents, and how to query PostgreSQL array data as a BigQuery ARRAY data type.

Map data types

The following table lists data type conversions from supported source databases to the BigQuery destination.

Source database Source data type BigQuery data type
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) If the precision value is <=38, and the scale value is <=9 then NUMERIC . Otherwise 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

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 STRING
Oracle
NUMBER(precision=*) STRING
Oracle
NUMBER(precision, scale<=0) If p<=18, then INT64 . If 18<p=<78, then map to parameterized decimal types . If p>=79, map to STRING
Oracle
NUMBER(precision, scale>0) If 0<p=<78, then map to parameterized decimal types . If p>=79, map to 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 If precision = -1 , then STRING (BigQuery NUMERIC types require fixed precision). Otherwise BIGNUMERIC / NUMERIC . For more information, see the Arbitrary precision numbers section in PostgreSQL documentation.
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 (can be either STRING , DATE , NUMBER , or BOOLEAN ) STRING
Salesforce
COMBOBOX STRING
Salesforce
CURRENCY FLOAT64

Maximum allowed length is 18 digits.

Salesforce
DATACATEGORYGROUPREFERENCE STRING
Salesforce
EMAIL STRING
Salesforce
ENCRYPTEDSTRING STRING
Salesforce
ID STRING
Salesforce
JUNCTIONIDLIST STRING
Salesforce
MASTERRECORD STRING
Salesforce
MULTIPICKLIST STRING
Salesforce
PERCENT FLOAT64

Maximum allowed length is 18 digits.

Salesforce
PHONE STRING
Salesforce
PICKLIST STRING
Salesforce
REFERENCE STRING
Salesforce
TEXTAREA STRING

Maximum allowed length is 255 characters.

Salesforce
URL STRING

MongoDB data types

MongoDB binary JSON (BSON) documents are written to BigQuery in MongoDB Extended JSON (v1) strict mode format. The table shows how data types are represented in BigQuery, along with example values.

Source data type Example value BigQuery JSON type value
DOUBLE
3.1415926535 3.1415926535
STRING
"Hello, MongoDB!" "Hello, MongoDB!"
ARRAY
[
    "item1",
    123,
    true,
    { subItem: "object in 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}}

Query a PostgreSQL array as a BigQuery array data type

If you prefer to query a PostgreSQL array as a BigQuery ARRAY data type , you can convert the JSON values to a BigQuery array using the BigQuery JSON_VALUE_ARRAY function:

  
 SELECT 
  
 ARRAY 
 ( 
 SELECT 
  
 CAST 
 ( 
 element 
  
 AS 
  
  TYPE 
 
 ) 
  
 FROM 
  
 UNNEST 
 ( 
 JSON_VALUE_ARRAY 
 ( 
  BQ_COLUMN_NAME 
 
 , 
 '$' 
 )) 
  
 AS 
  
 element 
 ) 
  
  
 AS 
  
 array_col 
  

Replace the following:

  • TYPE : the BigQuery type that matches the element type in the PostgreSQL source array. For example, if the source type is an array of BIGINT values, then replace TYPE with INT64 .

    For more information about how to map the data types, see Map data types .

  • BQ_COLUMN_NAME : the name of the relevant column in the BigQuery table.

There are 2 exceptions to the way that you convert the values:

  • For arrays of BIT , BIT_VARYING or BYTEA values in the source column, run the following query:

     SELECT 
      
     ARRAY 
     ( 
     SELECT 
      
     FROM_BASE64 
     ( 
     element 
     ) 
      
     FROM 
      
     UNNEST 
     ( 
     JSON_VALUE_ARRAY 
     ( 
      BQ_COLUMN_NAME 
     
     , 
     '$' 
     )) 
      
     AS 
      
     element 
     ) 
      
      
     AS 
      
     array_of_bytes 
    
  • For arrays of JSON or JSONB values in the source column, use the JSON_QUERY_ARRAY function:

     SELECT 
      
     ARRAY 
     ( 
     SELECT 
      
     element 
      
     FROM 
      
     UNNEST 
     ( 
     JSON_QUERY_ARRAY 
     ( 
      BQ_COLUMN_NAME 
     
     , 
     '$' 
     )) 
      
     AS 
      
     element 
     ) 
      
      
     AS 
      
     array_of_jsons 
    
Design a Mobile Site
View Site in Mobile | Classic
Share by: