במאמר הזה מתוארים מיפויים של סוגי נתונים ממסדי נתונים שונים של מקורות לסוגי הנתונים התואמים שלהם ב-BigQuery. להבין איך סוגי נתונים שונים מומרים כשמעבירים נתונים ל-BigQuery, איך BigQuery מייצג מסמכי JSON בינאריים של MongoDB ואיך שולחים שאילתות לנתוני מערך של PostgreSQL כסוג נתונים ARRAY של BigQuery.
מיפוי סוגי נתונים
בטבלה הבאה מפורטות המרות של סוגי נתונים ממסדי נתונים נתמכים של מקורות אל היעד ב-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 RAW/LONG |
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 (סוגי NUMERIC ב-BigQuery דורשים דיוק קבוע). אחרת 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 | BIGINT |
INT64 |
| שרת SQL | BINARY |
BYTES |
| שרת SQL | BIT |
BOOL |
| שרת SQL | CHAR |
STRING |
| שרת SQL | DATE |
DATE |
| שרת SQL | DATETIME2 |
DATETIME |
| שרת SQL | DATETIME |
DATETIME |
| שרת SQL | DATETIMEOFFSET |
TIMESTAMP |
| שרת SQL | DECIMAL |
אם ערך הסקאלה הוא <=9, והערך של (precision - scale) הוא <= 29, אז NUMERIC. אחרת BIGNUMERIC |
| שרת SQL | FLOAT |
FLOAT64 |
| שרת SQL | IMAGE |
BYTES |
| שרת SQL | INT |
INT64 |
| שרת SQL | MONEY |
NUMERIC |
| שרת SQL | NCHAR |
STRING |
| שרת SQL | NTEXT |
STRING |
| שרת SQL | NUMERIC |
אם ערך הסקאלה הוא <=9, והערך של (precision - scale) הוא <= 29, אז NUMERIC. אחרת BIGNUMERIC |
| שרת SQL | NVARCHAR |
STRING |
| שרת SQL | NVARCHAR(MAX) |
STRING |
| שרת SQL | REAL |
FLOAT64 |
| שרת SQL | SMALLDATETIME |
DATETIME |
| שרת SQL | SMALLINT |
INT64 |
| שרת SQL | SMALLMONEY |
NUMERIC |
| שרת SQL | TEXT |
STRING |
| שרת SQL | TIME |
TIME |
| שרת SQL | ROWVERSION/TIMESTAMP |
BYTES |
| שרת SQL | TINYINT |
INT64 |
| שרת SQL | UNIQUEIDENTIFIER |
STRING |
| שרת SQL | VARBINARY |
BYTES |
| שרת SQL | VARBINARY(MAX) |
BYTES |
| שרת SQL | VARCHAR |
STRING |
| שרת SQL | VARCHAR(MAX) |
STRING |
| שרת SQL | 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 בפורמט של מצב קפדני של MongoDB Extended JSON (גרסה 1). בטבלה מוצג אופן הייצוג של סוגי הנתונים ב-BigQuery, יחד עם ערכים לדוגמה.
| סוג נתוני המקור | ערך לדוגמה | ערך מסוג JSON ב-BigQuery |
|---|---|---|
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}} |
הרצת שאילתות במערך PostgreSQL כמערך מסוג נתונים של BigQuery
אם אתם מעדיפים להריץ שאילתה על מערך PostgreSQL כסוג נתונים של ARRAY BigQuery, אתם יכולים להמיר את הערכים של JSON למערך BigQuery באמצעות הפונקציה JSON_VALUE_ARRAY של BigQuery:
SELECT ARRAY(SELECT CAST(element AS TYPE) FROM UNNEST(JSON_VALUE_ARRAY(BQ_COLUMN_NAME,'$')) AS element)AS array_col
מחליפים את מה שכתוב בשדות הבאים:
TYPE: הסוג ב-BigQuery שתואם לסוג הרכיב במערך המקור של PostgreSQL. לדוגמה, אם סוג המקור הוא מערך של ערכי
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