我有一个外部表,它有一个名为rundate的分区列。我可以使用
将数据加载到表中DataFrame.write.mode(SaveMode.Overwrite).orc("s3://test/table")
然后我使用
创建一个分区spark.sql("ALTER TABLE table ADD IF NOT EXISTS PARTITION(rundate = '2017-12-19')")
代码工作正常,我可以看到分区。但我无法在Hive表中看到数据。
答案 0 :(得分:0)
您尚未以正确的文件夹结构保存分区数据,还手动添加了数据不存在的分区。
两件事:
1.首先确保您在创建外部表的位置保存数据,并且文件夹结构与hive expect相同。例如,假设您的外部表名为table
,分区列为rundate
,分区值为2017-12-19
,外部表指向位置s3://test/table
。然后保存分区2017-12-19
的数据,如下所示:
DataFrame.write.mode(SaveMode.Overwrite).orc("s3://test/table/rundate=2017-12-19/")
2.在使用最新添加的分区更新hive的Metastore的命令下,一次保存成功。
synatx: msck repair table <tablename>
msck repair table table