impala COMPUTE STATS 指令
最近再测试impala 学习到COMPUTE STATS 但是不明白其中的意思
用一张表来举例
drop table if exists sjqy.small_bak_inf_ofr_asset_exi_hist;
--拆分小表
create table sjqy.small_bak_inf_ofr_asset_exi_hist as
select set_exi_row_id
from inf.inf_ofr_asset_exi_hist
where set_exi_row_id <> 'ROWID_ODS';
报错 :Error seeking to 268435456 in file: hdfs://drmcluster/user/sjzx_b/hive/ inf.db/inf_ofr_asset_exi_hist/000000_0
Error(255): Unknown error 255
使用 invalidate metadata inf.inf_ofr_asset_exi_hist;
执行成功
drop table if exists sjqy.small_ofr_asset_inst_attr;
create table sjqy.small_ofr_asset_inst_attr as
select a.asset_exi_row_id
,a.asset_row_id
,a.attr_id
,a.char_val
,a.date_val
,a.num_val
,a.create_dt
,a.last_upd_dt
,a.val_type_name
,a.etl_dt
,a.etl_time
from sjqy.ofr_asset_inst_attr_impala a
left semi join sjqy.small_bak_inf_ofr_asset_exi_hist b
on a.asset_exi_row_id = b.set_exi_row_id ;
报错内存不够
request memory estimate 889.71 GB is greater than pool limit 586.67 GB.
使用
COMPUTE sjqy.small_bak_inf_ofr_asset_exi_hist
再次执行sql成功
出最简单的方式是通过执行COMPUTE STATS来收集涉及到的所有表的统计信息,
并让 Impala 基于每一个表的大小、每一个列不同值的个数、等等信息自动的优化查询
最近再测试impala 学习到COMPUTE STATS 但是不明白其中的意思
用一张表来举例
drop table if exists sjqy.small_bak_inf_ofr_asset_exi_hist;
--拆分小表
create table sjqy.small_bak_inf_ofr_asset_exi_hist as
select set_exi_row_id
from inf.inf_ofr_asset_exi_hist
where set_exi_row_id <> 'ROWID_ODS';
报错 :Error seeking to 268435456 in file: hdfs://drmcluster/user/sjzx_b/hive/ inf.db/inf_ofr_asset_exi_hist/000000_0
Error(255): Unknown error 255
使用 invalidate metadata inf.inf_ofr_asset_exi_hist;
执行成功
drop table if exists sjqy.small_ofr_asset_inst_attr;
create table sjqy.small_ofr_asset_inst_attr as
select a.asset_exi_row_id
,a.asset_row_id
,a.attr_id
,a.char_val
,a.date_val
,a.num_val
,a.create_dt
,a.last_upd_dt
,a.val_type_name
,a.etl_dt
,a.etl_time
from sjqy.ofr_asset_inst_attr_impala a
left semi join sjqy.small_bak_inf_ofr_asset_exi_hist b
on a.asset_exi_row_id = b.set_exi_row_id ;
报错内存不够
request memory estimate 889.71 GB is greater than pool limit 586.67 GB.
使用
COMPUTE sjqy.small_bak_inf_ofr_asset_exi_hist
再次执行sql成功
「COMPUTE STATS」前
指令:
show
table
stats usermodel_inter_total_label;
返回:
log_date
|
#Rows
|
#Files
|
Size
|
Bytes Cached
|
Format
|
2014-12-13
|
-1
|
15
|
1.18GB
|
NOT CACHED
|
TEXT
|
2014-12-14
|
-1
|
3
|
1.80GB
|
NOT CACHED
|
TEXT
|
2014-12-15
|
-1
|
4
|
2.96GB
|
NOT CACHED
|
TEXT
|
Total
|
-1
|
22
|
5.93GB
|
0B
|
-
|
指令:
show
column
stats usermodel_inter_total_label;
返回:
Column
|
Type
|
#Distinct Values
|
#Nulls
|
Max Size
|
Avg Size
|
sn
|
STRING
|
-1
|
-1
|
-1
|
-1
|
label
|
STRING
|
-1
|
-1
|
-1
|
-1
|
heat
|
DOUBLE
|
-1
|
-1
|
-1
|
-1
|
active_record
|
STRING
|
-1
|
-1
|
-1
|
-1
|
log_date
|
STRING
|
3
|
0
|
-1
|
-1
|
「COMPUTE STATS」后
指令:
show
table
stats usermodel_inter_total_label;
返回:
log_date
|
#Rows
|
#Files
|
Size
|
Bytes Cached
|
Format
|
2014-12-13
|
9498438
|
2
|
469.76MB
|
NOT CACHED
|
TEXT
|
2014-12-14
|
17891595
|
1
|
893.44MB
|
NOT CACHED
|
TEXT
|
2014-12-15
|
27885473
|
2
|
1.37GB
|
NOT CACHED
|
TEXT
|
Total
|
55275506
|
5
|
2.71GB
|
0B
|
-
|
指令:
show
column
stats usermodel_inter_total_label;
返回:
Column
|
Type
|
#Distinct Values
|
#Nulls
|
Max Size
|
Avg Size
|
sn
|
STRING
|
13984716
|
-1
|
30
|
24.0039005279541
|
label
|
STRING
|
36
|
-1
|
13
|
4.26140022277832
|
heat
|
DOUBLE
|
382126
|
-1
|
8
|
8
|
active_record
|
STRING
|
7
|
-1
|
3
|
1.667400002479553
|
log_date
|
STRING
|
3
|
0
|
-1
|
-1
|
看来「COMPUTE STATS」的作用就是得出Impala原先不知道的值(-1)。
分析:
出最简单的方式是通过执行COMPUTE STATS来收集涉及到的所有表的统计信息,
并让 Impala 基于每一个表的大小、每一个列不同值的个数、等等信息自动的优化查询