Impala中的Invalidate Metadata和Refresh
Impala中有两种同步元数据的方式:INVALIDATE METADATA
和REFRESH
。
使用Impala执行的DDL操作,不需要使用任何INVALIDATE METADATA / REFRESH
命令。CatalogServer会将这种DDL元数据变化通过StateStore增量同步到集群中的所有Impalad节点。
在Impala之外,使用Hive或其他Hive客户端(如Spark SQL)等执行的DDL操作,就需要使用INVALIDATE METADATA
或REFRESH
来刷新元数据。
这里对INVALIDATE METADATA
和REFRESH
的使用场景做以下总结。
INVALIDATE METADATA
作废表的元数据和块的位置数据。下一次对元数据无效的表执行查询时,Impala会在查询之前重新加载相关的元数据。
语法
#刷新所有库所有表的元数据
INVALIDATE METADATA
#刷新某一个表的元数据
INVALIDATE METADATA [db_name.]table_name
使用场景
-
适用于当前Impala节点不知道的Hive表,如在Hive中
Create
了新表或新库。 -
在Hive中
Drop
了表或库。 -
可用于刷新整个库的所有表。
注意:在生产中应避免使用INVALIDATE METADATA
什么都不加。对于具有大量数据或有许多分区的表而言,检索表的所有元数据可能非常耗时,且都加载到内存也非常浪费空间。
REFRESH
刷新特定表的最新元数据和块的位置数据。
语法
#刷新某个表
REFRESH [db_name.]table_name
#刷新某个表的指定分区
REFRESH [db_name.]table_name PARTITION (partition_col=value)
使用场景
-
适用于当前Impala节点已经知道的Hive表。
-
在Hive中执行
ALTER TABLE
,INSERT
,LOAD DATA
语句之后。如ALTER TABLE ADD/DROP PARTITION
语句。 -
Hive表在HDFS上某个分区目录数据发生变化后。
-
REFRESH
必须指定一个表。即:不能用于刷新整个库的所有表。 -
REFRESH
是增量更新,比INVALIDATE METADATA
代价要小很多,在既能使用REFRESH
也能使用INVALIDATE METADATA
的场景下,用REFRESH
。
上一篇: Hive 05 数据查询
下一篇: impala、hive 操作hbase
推荐阅读
-
android中Invalidate和postInvalidate的更新view区别
-
对squid中refresh_pattern的一些理解和建议
-
msck、invalidate metadata和refresh命令
-
View中的 postInvalidate 和 invalidate 的区别
-
Impala - 刷新表的两种方式invalidate metadata和refresh
-
android中Invalidate和postInvalidate的区别
-
Impala中的Invalidate Metadata和Refresh
-
impala中的bug,float和double的比较
-
对squid中refresh_pattern的一些理解和建议
-
urlpattern 对squid中refresh_pattern的一些理解和建议