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. OtherwiseBIGNUMERIC | 
| 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 | 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(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, thenSTRING(BigQueryNUMERICtypes require fixed precision). OtherwiseBIGNUMERIC/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 eitherSTRING,DATE,NUMBER, orBOOLEAN) | STRING | 
| Salesforce | COMBOBOX | STRING | 
| Salesforce | CURRENCY | FLOAT64Maximum 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 | FLOAT64Maximum allowed length is 18 digits. | 
| Salesforce | PHONE | STRING | 
| Salesforce | PICKLIST | STRING | 
| Salesforce | REFERENCE | STRING | 
| Salesforce | TEXTAREA | STRINGMaximum 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"}] | 
| 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 - BIGINTvalues, 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_VARYINGor- BYTEAvalues 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 - JSONor- JSONBvalues in the source column, use the- JSON_QUERY_ARRAYfunction:- SELECT ARRAY(SELECT element FROM UNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME,'$')) AS element) - AS array_of_jsons