视频网站文案,山东省市场监督管理局官网,wordpress 提前8小时,辽宁大连直客部七部对于数据量的统计#xff0c;从表是否分区分为分区表和非分区表两者有着不同的统计方式
非分区表
1. 利用传统方法count 2. 利用元数据计算#xff1a;
select
sum(tb.param_value) AS TOTAL
from sys.tbls t
left join sys.dbs d
on t.db_id d.db_id
left join sys.tabl…对于数据量的统计从表是否分区分为分区表和非分区表两者有着不同的统计方式
非分区表
1. 利用传统方法count 2. 利用元数据计算
select
sum(tb.param_value) AS TOTAL
from sys.tbls t
left join sys.dbs d
on t.db_id d.db_id
left join sys.table_params tb
on t.tbl_id tb.tbl_id
where
tb.param_keynumRows
and
d.namedw
and (t.tbl_name ods_pre_t_glj_nb_road_s) 但是有时候会出现特殊情况有非分区表的numrows为0 此时需要执行
ANALYZE TABLE dw.ods_pre_t_lwzx_zdsj COMPUTE STATISTICS;
重新再次执行SQL语句numRows已经有数据了 分区表 selectsum(e.PARAM_VALUE) as numRowsfrom sys.TBLS tleft join sys.DBS don t.DB_ID d.DB_IDleft join sys.PARTITIONS a on t.TBL_IDa.TBL_IDleft join sys.PARTITION_PARAMS e on a.part_ide.part_idwhere t.TBL_NAMEods_pre_tbl_ex_wasteAND e.PARAM_KEYnumRows
同样也会出现统计数量为0或NULL或者数据量缺少的情况此时同样需要执行
ANALYZE TABLE dw.ods_pre_t_lwzx_zdsj COMPUTE STATISTICS;
ANALYZE TABLE
ANALYZE TABLE是什么为什么每次元数据信息统计时总会出现个别统计不准确的情况
ANALYZE TABLE 是 Hive 中用于收集表或分区统计信息的命令。它的作用是通过扫描数据文件来计算表或分区的关键统计信息例如行数、数据大小、列值分布等。这些统计信息存储在 Hive 的元数据中用于优化查询计划。
统计不准确的原因有很多分区未被正确扫描、数据未完全加载或变动后未重新统计、数据文件格式的限制等等。
优化后的SQL
SELECTa.tbl_id,a.tbl_name,COALESCE(IF(a.table_numRows0,b.PARTITION_numRows,a.table_numRows),0) as numRowsFROM(-- 各表总行数SELECT t.tbl_id,t.tbl_name,COALESCE(param_value,0) as table_numRowsfrom sys.TBLS tleft join sys.DBS don t.DB_ID d.DB_IDleft join sys.table_params tbon t.tbl_id tb.tbl_id-- 需要统计的数据库where d.namedwand tb.param_keynumRows )aleft join(-- 各分区表总行数select a.tbl_id,SUM(COALESCE(PARAM_VALUE,0)) as PARTITION_numRowsfrom sys.PARTITIONS a left join sys.PARTITION_PARAMS bon a.part_idb.part_idWHERE b.PARAM_KEYnumRowsGROUP BY a.tbl_id)bON a.tbl_idb.tbl_id
没有办法去批量的analyze表可以写个shell脚本执行以上优化后的SQL将查询结果为0的表执行analyze以及所有分区表analyze后再执行优化后的SQL。