我在hdfs中有一个目录,每天都有一个处理过的文件放在这个目录中,文件名中有datetimestamp,如果我在这个目录位置上创建外部表,那么当每天都有文件出现并驻留在这个目录中时,外部表会自动刷新吗??
jucafojl1#
如果将文件添加到配置单元中的表目录或分区目录(无所谓)、外部表或托管表中,则可以访问数据进行查询,无需执行任何其他步骤即可使数据可用,无需刷新。配置单元表/分区是元数据(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 with statistics进行查询计算,则可能需要使用 ANALYZE TABLE hive_table PARTITION(partitioned_col) COMPUTE STATISTICS . 有关更多详细信息,请参见此答案:https://stackoverflow.com/a/39914232/2700344如果不需要统计信息,并且希望每次查询时都扫描表位置,请将其关闭: set hive.compute.query.using.stats=false;
ALTER TABLE ADD PARTITION LOCATION=<new location>
MSCK REPAIR TABLE
ALTER TABLE table_name RECOVER PARTITIONS
count(*)
ANALYZE TABLE hive_table PARTITION(partitioned_col) COMPUTE STATISTICS
set hive.compute.query.using.stats=false;
1条答案
按热度按时间jucafojl1#
如果将文件添加到配置单元中的表目录或分区目录(无所谓)、外部表或托管表中,则可以访问数据进行查询,无需执行任何其他步骤即可使数据可用,无需刷新。
配置单元表/分区是元数据(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 with statistics进行查询计算,则可能需要使用
ANALYZE TABLE hive_table PARTITION(partitioned_col) COMPUTE STATISTICS
. 有关更多详细信息,请参见此答案:https://stackoverflow.com/a/39914232/2700344如果不需要统计信息,并且希望每次查询时都扫描表位置,请将其关闭:
set hive.compute.query.using.stats=false;