分区的 ORC table 在 Hive 中显示为空
Partitioned ORC table shows up empty in Hive
我已经将 Spark 数据帧写入分区 ORC
文件,如下所示:
df.repartition("LOADED")\
.write\
.partitionBy("LOADED")\
.format("orc")\
.save("location")
磁盘上的一切都正确。
之后,我想从中创建一个 Hive table,例如:
CREATE TABLE table USING ORC LOCATION 'location'
命令运行没有任何错误。但是如果我尝试查询 table,它是空的。
我试过在不分区的情况下做同样的事情,而且效果很好。我究竟做错了什么?
分区文件夹如下所示:LOADED=2019-11-16
供参考:我想将数据写入 Azure Blob 存储,并在不同的集群中从中创建一个 Hive table。
您正在将数据直接写入 location
,而不是通过 hiveQL 语句,在这种情况下我们需要从 [更新配置单元 table 的元数据=22=] 使用:
msck repair table <db_name>.<table_name>;
(或)
alter table <db_name>.<table_name> add partition(`LOADED`='<value>') location '<location_of the specific partition>';
然后 运行 下面的命令从 table 中列出分区:
show partitions <db_name>.<table_name>;
您只需更新 table 上的分区信息,以便 Hive 可以列出存在的分区。这是通过 MSCK REPAIR 命令完成的:
spark.sql("MSCK REPAIR TABLE <tableName>")
有关此命令的更多信息here
此处为快速示例
scala> spark.sql("select * from table").show
20/03/28 17:12:46 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
+------+------+
|column|LOADED|
+------+------+
+------+------+
scala> spark.sql("MSCK REPAIR TABLE table")
scala> spark.sql("select * from table").show
+------+----------+
|column| LOADED|
+------+----------+
| a|2019-11-16|
| c|2019-11-16|
| b|2019-11-17|
+------+----------+
我已经将 Spark 数据帧写入分区 ORC
文件,如下所示:
df.repartition("LOADED")\
.write\
.partitionBy("LOADED")\
.format("orc")\
.save("location")
磁盘上的一切都正确。 之后,我想从中创建一个 Hive table,例如:
CREATE TABLE table USING ORC LOCATION 'location'
命令运行没有任何错误。但是如果我尝试查询 table,它是空的。
我试过在不分区的情况下做同样的事情,而且效果很好。我究竟做错了什么?
分区文件夹如下所示:LOADED=2019-11-16
供参考:我想将数据写入 Azure Blob 存储,并在不同的集群中从中创建一个 Hive table。
您正在将数据直接写入 location
,而不是通过 hiveQL 语句,在这种情况下我们需要从 [更新配置单元 table 的元数据=22=] 使用:
msck repair table <db_name>.<table_name>;
(或)
alter table <db_name>.<table_name> add partition(`LOADED`='<value>') location '<location_of the specific partition>';
然后 运行 下面的命令从 table 中列出分区:
show partitions <db_name>.<table_name>;
您只需更新 table 上的分区信息,以便 Hive 可以列出存在的分区。这是通过 MSCK REPAIR 命令完成的:
spark.sql("MSCK REPAIR TABLE <tableName>")
有关此命令的更多信息here
此处为快速示例
scala> spark.sql("select * from table").show
20/03/28 17:12:46 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
+------+------+
|column|LOADED|
+------+------+
+------+------+
scala> spark.sql("MSCK REPAIR TABLE table")
scala> spark.sql("select * from table").show
+------+----------+
|column| LOADED|
+------+----------+
| a|2019-11-16|
| c|2019-11-16|
| b|2019-11-17|
+------+----------+