欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Impala中的Invalidate Metadata和Refresh

程序员文章站 2022-07-11 08:26:25
...

Impala中有两种同步元数据的方式:INVALIDATE METADATAREFRESH

使用Impala执行的DDL操作,不需要使用任何INVALIDATE METADATA / REFRESH命令。CatalogServer会将这种DDL元数据变化通过StateStore增量同步到集群中的所有Impalad节点。

在Impala之外,使用Hive或其他Hive客户端(如Spark SQL)等执行的DDL操作,就需要使用INVALIDATE METADATAREFRESH来刷新元数据。

这里对INVALIDATE METADATAREFRESH的使用场景做以下总结。

INVALIDATE METADATA

作废表的元数据和块的位置数据。下一次对元数据无效的表执行查询时,Impala会在查询之前重新加载相关的元数据。

语法

#刷新所有库所有表的元数据
INVALIDATE METADATA

#刷新某一个表的元数据
INVALIDATE METADATA [db_name.]table_name

使用场景

  1. 适用于当前Impala节点不知道的Hive表,如在Hive中Create了新表或新库。

  2. 在Hive中Drop了表或库。

  3. 可用于刷新整个库的所有表。

注意:在生产中应避免使用INVALIDATE METADATA什么都不加。对于具有大量数据或有许多分区的表而言,检索表的所有元数据可能非常耗时,且都加载到内存也非常浪费空间。

REFRESH

刷新特定表的最新元数据和块的位置数据。

语法

#刷新某个表
REFRESH [db_name.]table_name

#刷新某个表的指定分区
REFRESH [db_name.]table_name PARTITION (partition_col=value)

使用场景

  1. 适用于当前Impala节点已经知道的Hive表。

  2. 在Hive中执行ALTER TABLEINSERTLOAD DATA语句之后。如ALTER TABLE ADD/DROP PARTITION语句。

  3. Hive表在HDFS上某个分区目录数据发生变化后。

  4. REFRESH必须指定一个表。即:不能用于刷新整个库的所有表。

  5. REFRESH是增量更新,比INVALIDATE METADATA代价要小很多,在既能使用REFRESH也能使用INVALIDATE METADATA的场景下,用REFRESH