我正在使用与Spark捆绑在一起的Hive。我的Spark Streaming作业以/hdfs/nodes/part-r-$partition_num-$job_hash.gz.parquet的形式将250个Parquet文件写入每个批处理作业的HDFS。这意味着在1个作业之后,我在HDFS中有250个文件,在2个之后,我有500个。我使用Parquet创建的外部Hive表指向/ hdfs / nodes它的位置,但它没有&#39 ; t在我重新运行程序后更新以包含新文件中的数据。
Hive外部表是否包含表中的新文件,或者仅对表制作时存在的现有文件进行更新?
另请参阅我关于automatically updating tables using Hive的相关问题。
答案 0 :(得分:0)
您需要发出REFRESH table_name
或INVALIDATE METADATA [[db_name.]table_name]
命令,以便更新Hive元数据以包含这些新文件。
此解决方案假设您已运行Impala。
答案 1 :(得分:0)
这有点像黑客,但我最终让Hive使用新分区和MSCK REPAIR TABLE tablename
检测新文件,后者在创建新分区后会检测到它们。
这不能解决原始问题,因为每次我在Hive中拥有我想要的新文件时都必须创建一个新分区,但这让我可以继续前进。