这种缓存机制就导致通过其他手段更新元数据或者数据对于Impala是无感知的,例如通过hive建表,直接拷贝新的数据到HDFS上等,Impala提供了两种机制来实现元数据的更新,分别是INVALIDATE METADATA和REFRESH操作,本文将详细介绍这两个操作。
impala-shell -i node_name -q 'invalidate table_name'refresh 命令是用于刷新某个表或者某个分区的数据信息,它会重用之前的表元数据,仅仅执行文件刷新操作,它能够检测到表中分区的增加和减少,主要用于表中元数据未修改,数据的修改,例如insert into(插入数据)、load data(加载数据)、alter table add partitio...
refresh 对于通过hive加载,插入,改变的数据操作,或者通过hdfs对数据进行改变的操作,impala都无法自动识别数据的变化,可以使用REFRESH table_name,该语句可以让impala识别到数据的变化,可以对某张表更新元数据,也可以对某张表的某分区更新元数据。 refresh [table];-- 刷新表table的元数据 refresh [table] partition [pa...
即使对于单个表,INVALIDATE METADATA也比REFRESH更昂贵,所以在为现有表添加新数据文件的常见情况下,请选择REFRESH。 INVALIDATE METADATA 和REFRESH是对应的:INVALIDATE METADATA 在后续查询需要时等待重新加载元数据,但是会重新加载表的所有元数据,这可能是一项昂贵的操作,尤其是对于有很多分区的大型表。REFRESH会立即重新加...
invalidatemetadata比起refresh而言要重量级得多,并且它造成impalad之间查询不一致也会更严重。因此,也几乎禁止使用不带表名的invalidatemetadata语句。 如果数仓中涉及到非常大批量的元数据更改,那么建议直接重启catalogd和statestored,这总比使用不带表名的invalidatemetadata来得高效一些。
再通过statestored完成每一次的元数据的更新到impalad节点上,Impala集群会缓存全部的元数据,这种缓存机制就导致通过其他手段更新元数据或者数据对于Impala是无感知的,例如通过Hive建表,直接拷贝新的数据到HDFS上等,Impala提供了两种机制来实现元数据的更新,分别是INVALIDATE METADATA和REFRESH操作,本文将详细介绍这两个操作...
在Impala中,invalidate metadata与refresh语句都可以用来刷新表,但它们本质上还是不同的。本文简要分析一下,并说明它们应该在什么情况下使用。 Impala on Hive介绍 我们一般会采用传统的MySQL或PostgreSQL数据库作为Hive的Metastore(元数据存储)组件。在CDH中默认是MySQL,我们可以通过show tables in hive语句清晰地看到Hive...
在Impala中,invalidate metadata与refresh语句都可以用来刷新表,但它们本质上还是不同的。本文简要分析一下,并说明它们应该在什么情况下使用。 Impala on Hive介绍 我们一般会采用传统的MySQL或PostgreSQL数据库作为Hive的Metastore(元数据存储)组件。在CDH中默认是MySQL,我们可以通过show tables in hive语句清晰地看到Hive...
再通过statestored完成每一次的元数据的更新到impalad节点上,Impala集群会缓存全部的元数据,这种缓存机制就导致通过其他手段更新元数据或者数据对于Impala是无感知的,例如通过hive建表,直接拷贝新的数据到HDFS上等,Impala提供了两种机制来实现元数据的更新,分别是INVALIDATE METADATA和REFRESH操作,本文将详细介绍这两个操作...
如果在 Impala 中对某个表执行了 DDL/DML,Impala会对应地更改元数据缓存,以让其保持最新状态(还是已加载状态)。如果是外部系统(如Hive、Spark)对某个表做了更改,则Impala缓存的变成了过时的元数据,会导致查询失败或查漏数据。Impala 提供了 Invalidate Metadata 和 Refresh 两个语句来解决这种情况,语法如下:...