Hive 配置单元表验证

Hive 配置单元表验证,hive,hiveql,Hive,Hiveql,我有一张有一些记录的蜂巢表。 我使用脚本验证该表,结果存储在另一个表中。 基本上,我必须对这两个表进行计数,并找出差异。 然后将差值与阈值进行比较 根据该结果,表将用于分析或拒绝 阈值是表可能包含的坏记录的度量值 例如:- 假设表A有100条记录。 记录经过验证,有效记录存储在另一个表B中。 假设表B有70条记录。 所以差值是100-70=30 假设阈值为20(意味着最多可以出现20条坏记录), 所以在这种情况下,表将被拒绝 如何执行此操作?如果hive.stats.autogather设置为t

我有一张有一些记录的蜂巢表。 我使用脚本验证该表,结果存储在另一个表中。 基本上,我必须对这两个表进行计数,并找出差异。 然后将差值与阈值进行比较

根据该结果,表将用于分析或拒绝

阈值是表可能包含的坏记录的度量值

例如:- 假设表A有100条记录。 记录经过验证,有效记录存储在另一个表B中。 假设表B有70条记录。 所以差值是100-70=30

假设阈值为20(意味着最多可以出现20条坏记录), 所以在这种情况下,表将被拒绝


如何执行此操作?

如果
hive.stats.autogather
设置为
true
,则自动收集表格统计信息,包括
numRows

在这种情况下,你所要做的就是检查统计数据,然后做出你想要的任何决定

如果情况并非如此,则只执行2个
选择count(*)
查询,例如-

src_numRows=$(hive -e "select count(*) from src")
trg_numRows=$(hive -e "select count(*) from trg")
附言

它可以通过单个查询完成,但我认为保存原始结果比保存差异更好

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
;
创建目标表

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
;

检查表`统计数据

bash

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'
;


您正在创建新表吗?插入到现有表中?这是一张分区的桌子吗?您正在插入到特定分区吗?我正在创建一个新表并在其中存储有效记录。