impala系列: 同步Hive元數據和收集統計信息



---====================
-- Impala 獲取hive 的 metadata
---====================
Impala 通常和Hive共用同一個metadata 數據庫(通常是MySQL/PostgreSQL), 所以Impala 能夠讀取到Hive的元數據信息. 如果Impala需要訪問Hive表, 需要將Hive metadata 刷新到impala中.

在Hive中Create/Drop表后, 或者HDFS rebalance,或者手工刪除HDFS的文件后, 則需要在impala中執行下面兩行命令:
INVALIDATE METADATA table_name;
describe table_name;
第一行命令 INVALIDATE METADATA 告訴impala 指定的 table 元數據已經過期, impala 將在下一次使用到該表時自動刷新元數據, 第二行命令即觸發impala去更新元數據, 以免將來真正使用該表耗時太久.

如果Impala已經知道了Hive表的存在后, 又通過Hive增加或刪除分區或alter table, 使用 refresh 命令即可更新元數據. refresh是對元數據進行增量更新, 和INVALIDATE METADATA相比, refresh命令使用成本低很多.
REFRESH table_name; --增量刷新全表
refresh [table_name] [PARTITION (key_col1=val1 [, key_col2=val2...])]]; --僅僅刷新指定分區

INVALIDATE METADATA 命令如果不指定表名, 則將所有表的元數據都標記為過期, 慎用!


---====================
-- 收集統計信息
---====================
Impala 僅僅能部分利用Hive的統計信息, 要想得到好的執行效率, impala需要收集統計信息.

1. 檢查統計信息
show table stats table_name; --顯示表和分區級別的統計信息.
如果返回第一列 #Rows 值-1, 表名還沒有收集過統計信息.

show column stats table_name ; --顯示列級別的統計信息.


2. 收集統計信息
Impala 的compute stats 一條命令同時采集表和字段兩種信息, 使用起來非常方便.
它增量和全量兩種寫法, 在從未收集過統計信息的前提下, 並且數量一致的情況下, 使用COMPUTE STATS命令要比COMPUTE INCREMENTAL STATS速度更快. 所以對於非分區表, 推薦使用COMPUTE STATS.
COMPUTE STATS table_name ; -- 對於非分區表, 推薦使用COMPUTE STATS, 速度更快
COMPUTE INCREMENTAL STATS table_name ;--對於分區表, 推薦使用COMPUTE INCREMENTAL STATS, 速度更快一些.


如果table通過Hive增加了分區, 需要先進行refresh, 然后增量收集統計信息.
REFRESH table_name;
COMPUTE INCREMENTAL STATS table_name;

3. 刪除統計信息
DROP STATS table_name
DROP INCREMENTAL STATS table_name PARTITION (key_col1=val1 [, key_col2=val2...])]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM