Data type mappings in BigQuery Stay organized with collections Save and categorize content based on your preferences.
This page describes data type mappings from various source databases to theircorresponding BigQuery data types. Understand how different data typesconvert when migrating data to BigQuery, how BigQueryrepresents MongoDB binary JSON documents, and how to query PostgreSQL array dataas a BigQueryARRAY 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 thenNUMERIC. 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 |
| JSONBOOLEAN,NUMBER,OBJECT,STRING,ARRAY andNULL data types are supported. |
| 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 | DATETIMEZero dates aren't supported and are replaced withNULL values. |
| 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 | STRING |
| Oracle | NUMBER(precision=*) | STRING |
| Oracle | NUMBER(precision, scale<=0) | If p<=18, thenINT64. If 18<p=<78, then map toparameterized decimal types. If p>=79, map toSTRING |
| Oracle | NUMBER(precision, scale>0) | If 0<p=<78, then map toparameterized decimal types. If p>=79, map toSTRING |
| Oracle | NVARCHAR2 | STRING |
| Oracle | RAW | STRING |
| Oracle | ROWID | STRING |
| Oracle | SDO_GEOMETRY | UNSUPPORTED |
| Oracle | SMALLINT | INT64 |
| Oracle | TIMESTAMP | TIMESTAMPZero dates aren't supported and are replaced withNULL values. |
| Oracle | TIMESTAMP WITH TIME ZONE | TIMESTAMPZero dates aren't supported and are replaced withNULL values. |
| Oracle | UDT (user-defined type) | UNSUPPORTED |
| Oracle | UROWID | UNSUPPORTED |
| Oracle | VARCHAR | STRING |
| Oracle | VARCHAR2 | STRING |
| Oracle | XMLTYPE | UNSUPPORTED |
| PostgreSQL | ARRAY | JSONArrays ofDATE,TIMESTAMP orTIMESTAMP WITH TIME ZONE data types aren't supported. |
| 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 (BigQueryNUMERIC types require fixed precision). OtherwiseBIGNUMERIC/NUMERIC. For more information, see theArbitrary 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 inMongoDB Extended JSON (v1)strict mode format. The table shows how data types are represented inBigQuery, 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 aBigQueryARRAY data type,you can convert theJSON values to a BigQuery array using the BigQueryJSON_VALUE_ARRAY function:
SELECTARRAY(SELECTCAST(elementASTYPE)FROMUNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$'))ASelement)ASarray_col
Replace the following:
TYPE: the BigQuery type that matches the element type inthe PostgreSQL source array. For example, if the source type is an array of
BIGINTvalues, then replaceTYPE withINT64.For more information about how to map the data types, seeMap data types.
BQ_COLUMN_NAME: the name of the relevant column in the BigQuerytable.
There are 2 exceptions to the way that you convert the values:
For arrays of
BIT,BIT_VARYINGorBYTEAvalues in the source column,run the following query:SELECTARRAY(SELECTFROM_BASE64(element)FROMUNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$'))ASelement)
ASarray_of_bytes For arrays of
JSONorJSONBvalues in the source column, use theJSON_QUERY_ARRAYfunction:SELECTARRAY(SELECTelementFROMUNNEST(JSON_QUERY_ARRAY(BQ_COLUMN_NAME,'$'))ASelement)
ASarray_of_jsons
Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-12-15 UTC.