分区的ORC表在Hive中显示为空
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分区的ORC表在Hive中显示为空相关的知识,希望对你有一定的参考价值。
我已经将Spark数据帧写入到这样的分区ORC
文件中:
df.repartition("LOADED")
.write
.partitionBy("LOADED")
.format("orc")
.save("location")
所有内容均正确存在于磁盘上。之后,我想从中创建一个Hive表,例如:
CREATE TABLE table USING ORC LOCATION 'location'
该命令运行无任何错误。但是,如果我尝试查询该表,则该表为空。
我已经尝试过在不分区的情况下进行同样的操作,而且效果很好。我究竟做错了什么?分区的文件夹如下所示:LOADED=2019-11-16
作为参考:我想将数据写入Azure Blob存储,并在另一个群集中从中创建一个Hive表。
答案
您只需要更新表上的分区信息,以便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|
+------+----------+
另一答案
您不是通过hiveQL语句将数据直接写入location
,在这种情况下,我们需要使用以下命令从hive / spark更新hive表的元数据:
msck repair table <db_name>.<table_name>;
(或)
alter table <db_name>.<table_name> add partition(`LOADED`='<value>') location '<location_of the specific partition>';
然后运行以下命令从表中列出分区:
show partitions <db_name>.<table_name>;
以上是关于分区的ORC表在Hive中显示为空的主要内容,如果未能解决你的问题,请参考以下文章