即使存在与之关联的镶木地板文件,Hive 外部表也不显示任何数据

Posted

技术标签:

【中文标题】即使存在与之关联的镶木地板文件,Hive 外部表也不显示任何数据【英文标题】:Hive external table is not showing any data even when the parquet files associated with that are present 【发布时间】:2018-08-01 09:32:13 【问题描述】:

我创建了一个外部配置单元表,其分区如下-

CREATE EXTERNAL TABLE IF NOT EXISTS engine_power( 
engine_company              string,
engine_model_name           string,
power_timestamp             timestamp,
rotor_efficiency            float,
rotor_power         float,
rotor_speed             float) 
PARTITIONED BY (year int, month int, day int) STORED AS PARQUET 
location '/powerCalculation' ;

之后我在 pyspark 中执行一些计算,然后将最终数据帧写入 parquet 文件,如下所示-

df.write.partitionBy('year','month','day').parquet("/powerCalculation",mode='append')

它正在上述位置创建镶木地板文件,其中包含年、月和日的新文件夹,但是当我查询表时它没有显示任何数据,select * from engine_power 没有返回任何行。它只是给出没有数据的列。如果我发表声明,搜索各种文章后

MSCK REPAIR TABLE engine_power;

我正在获取更新的行。每次将数据写入分区表时都需要提供这个吗?是否有任何其他方式可以自动进行此更新?

【问题讨论】:

【参考方案1】:

没有自动刷新分区的选项,我使用的方法是在成功运行创建每日 parquet 文件的作业后,将额外的 Hive 操作定义为 Oozie 工作流程的一部分。

【讨论】:

所以我想我每次创建新的镶木地板文件时都必须运行那个 MSCK 修复语句 不是单个文件,而是在您创建新的分区文件夹时。通常,parquet 文件以每小时或每天的增量方式创建。

以上是关于即使存在与之关联的镶木地板文件,Hive 外部表也不显示任何数据的主要内容,如果未能解决你的问题,请参考以下文章

Hive 外部表未显示任何内容

拥有一个大的镶木地板文件还是拥有许多较小的镶木地板文件更好?

附加时的镶木地板文件保护

读取列中具有混合数据类型的镶木地板文件

如何在读取前根据定义的模式读取 pyspark 中的镶木地板文件?

更新取决于自己的数据的镶木地板文件的最佳方法