Apache Hive:CREATE TABLE 没有模式的 parquet 语句可能无法推断分区列
Apache Hive: CREATE TABLE statement without schema over parquet can fail to infer partition column
我在以下路径有一个分区镶木地板:
/path/to/partitioned/parq/
分区如下:
/path/to/partitioned/parq/part_date=2021_01_01_01_01_01
/path/to/partitioned/parq/part_date=2021_01_02_01_01_01
/path/to/partitioned/parq/part_date=2021_01_03_01_01_01
当我 运行 一个 Spark SQL 创建 TABLE 语句时:
CREATE TABLE IF NOT EXISTS
my_db.my_table
USING PARQUET
LOCATION '/path/to/partitioned/parq'
分区列 part_date
出现在我的数据集中,但 DESCRIBE EXTENDED 表示没有分区。 SHOW PARTITIONS my_db.my_table
显示没有分区数据。
这似乎是间歇性发生的,就像有时 spark 会推断分区,有时则不会。这会导致下游出现问题,我们添加一个分区并尝试 MSCK REPAIR TABLE my_db.my_table
,它说你不能 运行 在非分区表上。
我看到如果你确实声明了模式,你可以 FORCE 子句的 PARTITIONED BY
部分,但我们没有模式的奢侈,只有下面的文件。
为什么 spark 间歇性地无法从这种形状的镶木地板中确定分区列?
- 不幸的是,对于 Hive,您需要指定模式,即使 parquet 显然有它自己。
- 您需要在 DDL 中添加 partition by 子句。
- 使用 ALTER table 语句分别添加每个分区和位置。
我在以下路径有一个分区镶木地板:
/path/to/partitioned/parq/
分区如下:
/path/to/partitioned/parq/part_date=2021_01_01_01_01_01
/path/to/partitioned/parq/part_date=2021_01_02_01_01_01
/path/to/partitioned/parq/part_date=2021_01_03_01_01_01
当我 运行 一个 Spark SQL 创建 TABLE 语句时:
CREATE TABLE IF NOT EXISTS
my_db.my_table
USING PARQUET
LOCATION '/path/to/partitioned/parq'
分区列 part_date
出现在我的数据集中,但 DESCRIBE EXTENDED 表示没有分区。 SHOW PARTITIONS my_db.my_table
显示没有分区数据。
这似乎是间歇性发生的,就像有时 spark 会推断分区,有时则不会。这会导致下游出现问题,我们添加一个分区并尝试 MSCK REPAIR TABLE my_db.my_table
,它说你不能 运行 在非分区表上。
我看到如果你确实声明了模式,你可以 FORCE 子句的 PARTITIONED BY
部分,但我们没有模式的奢侈,只有下面的文件。
为什么 spark 间歇性地无法从这种形状的镶木地板中确定分区列?
- 不幸的是,对于 Hive,您需要指定模式,即使 parquet 显然有它自己。
- 您需要在 DDL 中添加 partition by 子句。
- 使用 ALTER table 语句分别添加每个分区和位置。