当文件添加到指向目录时,外部配置单元表是否会自行刷新

Shi*_*e_R 5 hadoop hive bigdata hdfs hiveql

我在 HDFS 中有一个目录,每天都会将一个已处理的文件放置在该目录中,文件名中包含 DateTimeStamp,如果我在该目录位置上创建外部表,当每天的文件到达并驻留在该目录中时,外部表是否会自行刷新? ?

lef*_*oin 3

如果您将文件添加到表目录或分区目录中,无论是 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。有关更多详细信息,请参阅此答案:/sf/answers/2793996271/

如果您不需要统计信息并希望每次查询时都扫描表位置,请将其关闭:set hive.compute.query.using.stats=false;