借助 Lakehouse 运行时目录,您可以将 Apache Spark 和 Apache Hive 与 BigQuery 集成,支持 Parquet、ORC、Avro、CSV、JSON 和 Delta Lake 等存储格式。在运行跨引擎工作负载之前,您可以查看这些 Hive SerDe 和 Spark 数据源兼容性以及数据类型转换规则,以验证表架构是否与 Lakehouse 运行时目录一致。
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 的兼容性。
CSV 和 JSON SerDe 表可从 BigQuery 查询。但是,CSV 和 JSON Spark 数据源表不可从 BigQuery 查询。
| 格式 | Spark SQL DDL 语法 | 可从 BigQuery 查询 |
|---|---|---|
| Parquet | CREATE TABLE ... USING PARQUET |
是 |
| ORC | CREATE TABLE ... USING ORC |
是 |
| Avro | CREATE TABLE ... USING AVRO |
是 |
| Delta Lake | CREATE TABLE ... USING DELTA |
是 |
| 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 时,才需要执行此操作。 |