列出需要无效/刷新的Impala表

时间:2018-08-28 08:38:07

标签: impala

我如何以编程方式找到所有需要INVALIDATE METADATA语句的Impala表(因为它们是在Hive中创建的,但对于Impala尚不了解)或REFRESH(因为已添加列,已添加数据文件等)。 )?

1 个答案:

答案 0 :(得分:0)

使元数据无效:

作为一种解决方法,创建一个shell脚本来执行以下步骤。

  1. 使用beeline,连接到特定数据库并运行show table语句并将输出数据保存到文件中。
  2. 使用impala-shell,连接到相同的特定数据库并运行show table语句并将输出数据保存到另一个文件。
  3. 现在比较这两个文件以删除重复项,并从第一个文件中获得唯一表列表,该列表是仅位于配置单元中而不位于黑斑羚中的表的列表。

注意:

a。您可以遍历所有数据库并将输出保存到文件中,而不必每次都分1步和2步同时使用一个特定的数据库。在循环本身内部,您可以重定向输出文件并将其附加到另一个最终输出文件,并以某种格式存储数据,例如database.table或database_table,以将所有数据库中的所有表合并为一个文件。最后,执行步骤3。

b。删除重复项后,第二个输出文件中的唯一表将是在蜂巢中删除的表,并且需要在impala中运行无效元数据才能将其从impala列表中删除。

c。配置单元可以识别在impala中重命名的表,但反之亦然,并且对于旧表名和新表名都应运行无效元数据以分别在impala中删除和添加。这适用于大多数操作,而不仅仅是表的重命名。

刷新:

考虑一个具有2列和1行数据的文本格式表。 现在,假设将第三列添加到直线表中的该表中。

select * from table; ---gives 3 columns in beeline and 2 columns in impala since refresh is not run on impala for this table.

在这种情况下,如果我们在运行刷新之前在impala中运行计算统计信息,那么蜂巢中新添加的列也将从蜂巢中的表模式中删除。

select * from table; ---gives 2 columns in beeline and 2 columns in impala since compute stats from impala deleted the extra column metadata of table although data resides in hdfs for that column. This might cause parsing issues in impala if the column is added somewhere in the middle or front instead of ending.

因此,建议在添加新列或在beeline中进行任何修改后,立即在impala中运行REFRESH表名,以使现有表不丢失上述方案中所述的表架构。

refresh table; ---Right after modification in hive run refresh in impala.

select * from table; ---gives 3 columns in beeline and 3 columns in impala since refresh is run before compute stats in impala.