本文档详细介绍了通过 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 时,才需要执行此操作。 |