配置单元表验证

vtwuwzda  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(228)

我有一个Hive表和一些记录。我使用脚本验证表,结果存储在另一个表中。基本上,我要计算这两张表的数量,找出它们的区别。然后将差值与阈值进行比较。
根据该结果,表将用于分析或拒绝。
阈值是表可以包含的坏记录的度量值。
example:- assume a表有100条记录。对记录进行验证,有效记录存储在另一个表b中。假设表b有70条记录。所以差值是100-70=30。
假设阈值为20(意味着最多可以出现20条坏记录),所以在这种情况下,表将被拒绝。
如何执行此操作?

2g32fytz

2g32fytz1#

如果 hive.stats.autogather 设置为 true 然后自动收集表统计信息,包括 numRows .
在这种情况下,你所要做的就是检查统计数据,然后做任何你想做的决定。
如果不是这样,就执行2 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          |
+----------+-------------+

相关问题