我在HDFS中有一个目录,每天一个已处理的文件放在该目录中,文件名中包含DateTimeStamp,如果我在该目录位置上创建外部表,那么当每天文件到来并驻留在该目录中时外部表是否会自行刷新? ?
如果将文件添加到表目录或分区目录中,无关紧要,Hive中的外部或托管表,数据将可供查询访问,您无需执行任何其他步骤即可使数据可用,无需刷新。
Hive表/分区是元数据(DDL,位置,统计信息,访问权限等)以及位置中的数据文件。因此,数据存储在HDFS的表/分区位置。
只有为新分区创建了尚未创建的新目录,才需要执行ALTER TABLE ADD PARTITION LOCATION=<new location>
或MSCK REPAIR TABLE
命令。 Amazon Elastic MapReduce(EMR)版本的Hive上的等效命令是:ALTER TABLE table_name RECOVER PARTITIONS
。
如果将文件添加到已创建的表/分区位置,则无需刷新。
CBO可以使用统计信息进行查询计算而无需读取数据文件,例如count(*)
。它仅适用于简单查询,如count(*),max()。
如果您使用带有统计信息的CBO进行查询计算,则可能需要使用ANALYZE TABLE hive_table PARTITION(partitioned_col) COMPUTE STATISTICS
进行刷新。有关更多详细信息,请参阅此答案:https://stackoverflow.com/a/39914232/2700344
如果您不需要统计信息并希望每次查询时都扫描表位置,请将其关闭:set hive.compute.query.using.stats=false;