本文將詳細說明透過 Lakehouse 執行階段目錄整合 Spark 和 Hive 與 BigQuery 時,資料類型和儲存格式的行為。
具體來說,本文件提供:
- 支援的儲存格式:包括 Parquet、ORC、Avro、CSV 和 JSON 等格式在 Hive SerDe 和 Spark 資料來源之間的相容性細目。
- 資料類型對應:Spark 和 BigQuery 資料類型之間的精確轉換規則。
在跨引擎執行工作負載或查詢資料表之前,請先使用這個頁面,確認資料表結構定義和儲存格式與中繼存放區一致。
Hive 和 Spark 之間支援的儲存空間格式
以下各節說明 Hive、Spark 和 BigQuery 之間的儲存格式和資料來源相容性。
詳細的儲存格式對應
BigQuery 會根據中繼資料中的 input_format、output_format 和 SerDe 程式庫,決定資料表的儲存格式。下表將這些屬性對應至 BigQuery 儲存空間格式。
| 輸入格式、輸出格式和 SerDe 程式庫 | BigQuery 儲存空間格式 |
|---|---|
org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe |
Parquet |
org.apache.hadoop.hive.ql.io.orc.OrcInputFormat org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat org.apache.hadoop.hive.ql.io.orc.OrcSerde |
ORC |
org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat org.apache.hadoop.hive.serde2.avro.AvroSerDe |
Avro |
org.apache.hadoop.mapred.TextInputFormat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat org.apache.hadoop.hive.serde2.OpenCSVSerde |
CSV |
org.apache.hadoop.mapred.TextInputFormat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat org.openx.data.jsonserde.JsonSerDe |
JSON |
org.apache.hadoop.mapred.TextInputFormat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat org.apache.hive.hcatalog.data.JsonSerDe |
JSON |
Hive SerDe 相容性
下表列出 Hive SerDe 資料表格式與 BigQuery 的相容性。
| 格式 | Spark SQL DDL 語法 | 可從 BigQuery 查詢 |
|---|---|---|
| Parquet | CREATE TABLE ... STORED AS PARQUET |
是 |
| ORC | CREATE TABLE ... STORED AS ORC |
是 |
| Avro | CREATE TABLE ... STORED AS AVRO |
是 |
| CSV | CREATE TABLE ... ROW FORMAT 'org.apache.hadoop.hive.serde2.OpenCSVSerde' |
是 |
| JSON | CREATE TABLE ... ROW FORMAT 'org.openx.data.jsonserde.JsonSerDe' |
是 |
Spark 資料來源相容性
下表列出 Spark 資料來源資料表格式與 BigQuery 的相容性。
您可以從 BigQuery 查詢 CSV 和 JSON SerDe 資料表。不過,CSV 和 JSON Spark 資料來源資料表則不支援。
| 格式 | Spark SQL DDL 語法 | 可從 BigQuery 查詢 |
|---|---|---|
| Parquet | CREATE TABLE ... USING PARQUET |
是 |
| ORC | CREATE TABLE ... USING ORC |
是 |
| Avro | CREATE TABLE ... USING AVRO |
是 |
| CSV | CREATE TABLE ... USING CSV |
否 |
| JSON | CREATE TABLE ... USING JSON |
否 |
從 Spark 傳輸至 BigQuery 的支援資料類型
下表列出 Spark 資料類型對應的 BigQuery 資料類型。
| Spark 資料類型 | BigQuery 資料類型 |
|---|---|
BYTE或TINYINT |
INT64 |
SMALLINT 或 SHORT |
INT64 |
INT 或 INTEGER |
INT64 |
BIGINT 或 LONG |
INT64 |
DECIMAL 或 NUMERIC |
BIGNUMERIC |
FLOAT |
FLOAT64 |
DOUBLE |
FLOAT64 |
REAL |
FLOAT64 |
BOOLEAN |
BOOL |
STRING |
STRING |
VARCHAR |
STRING |
CHAR 或 CHARACTER |
STRING |
BINARY |
BYTES |
DATE |
DATE |
TIMESTAMP或TIMESTAMP_LTZ |
TIMESTAMP |
ARRAY |
ARRAY |
STRUCT<col_name: type1, ...> |
STRUCT<col_name: type1, ...> |
MAP<key_type, value_type> |
ARRAY<STRUCT<key: key_type, value: value_type>>如要啟用這項功能,請傳送電子郵件至 biglake-help@google.com。只有在工作負載使用 MAP 時,才需要執行這項操作。 |