我有一个Hive表和一些记录。我使用脚本验证表,结果存储在另一个表中。基本上,我要计算这两张表的数量,找出它们的区别。然后将差值与阈值进行比较。根据该结果,表将用于分析或拒绝。阈值是表可以包含的坏记录的度量值。example:- assume a表有100条记录。对记录进行验证,有效记录存储在另一个表b中。假设表b有70条记录。所以差值是100-70=30。假设阈值为20(意味着最多可以出现20条坏记录),所以在这种情况下,表将被拒绝。如何执行此操作?
2g32fytz1#
如果 hive.stats.autogather 设置为 true 然后自动收集表统计信息,包括 numRows .在这种情况下,你所要做的就是检查统计数据,然后做任何你想做的决定。如果不是这样,就执行2 select count(*) 查询,例如-
hive.stats.autogather
true
numRows
select count(*)
src_numRows=$(hive -e "select count(*) from src") trg_numRows=$(hive -e "select count(*) from trg")
附笔只需一个查询就可以完成,但我认为保存原始结果比保存diff更好。
select s.cnt - t.cnt as diff from (select count(*) as cnt from src) s cross join (select count(*) as cnt from trg) t ;
创建源表
create table src as select i+1 as n from (select 1) x lateral view posexplode(split(space(100-1),' ')) pe as i,x ;
创建目标表
create table trg as select * from src where n > 30 ;
检查表`statistics猛击
src_numRows=$(hive -e "show tblproperties src ('numRows')") trg_numRows=$(hive -e "show tblproperties trg ('numRows')") printf "src:%g,trg:%g,diff:%g\n" ${src_numRows} ${trg_numRows} $((src_numRows-trg_numRows))
src:100,trg:70,diff:30另一种选择是直接从metasotre检查统计数据mysql数据库
select t.TBL_NAME ,tp.PARAM_VALUE from DBS d join TBLS t on t.DB_ID = d.DB_ID join TABLE_PARAMS tp on tp.TBL_ID = t.TBL_ID where d.NAME = 'default' and t.TBL_NAME in ('src','trg') and tp.PARAM_KEY = 'numRows' ;
+----------+-------------+ | TBL_NAME | PARAM_VALUE | +----------+-------------+ | src | 100 | | trg | 70 | +----------+-------------+
1条答案
按热度按时间2g32fytz1#
如果
hive.stats.autogather
设置为true
然后自动收集表统计信息,包括numRows
.在这种情况下,你所要做的就是检查统计数据,然后做任何你想做的决定。
如果不是这样,就执行2
select count(*)
查询,例如-附笔
只需一个查询就可以完成,但我认为保存原始结果比保存diff更好。
演示
创建源表
创建目标表
检查表`statistics
猛击
src:100,trg:70,diff:30
另一种选择是直接从metasotre检查统计数据
mysql数据库