Проверка таблицы Hive

У меня есть таблица кустов с некоторыми записями. Я проверяю таблицу с помощью скрипта, и результат сохраняется в другой таблице. В основном мне нужно подсчитать обе эти таблицы и найти разницу. Затем разница будет сравниваться с пороговым значением.

На основании этого результата таблица будет использована для анализа или отклонена.

Пороговое значение — это мера плохих записей, которые может содержать таблица.

Пример: предположим, что в таблице A 100 записей. записи проверяются, и действительные записи сохраняются в другой таблице B. допустим, что таблица B имеет 70 записей. поэтому разница 100-70=30.

предположим, что порог равен 20 (означает, что может присутствовать максимум 20 плохих записей), поэтому в этом случае таблица будет отклонена.

как это выполнить?


person Parameshwar    schedule 19.03.2017    source источник
comment
Вы создаете новую таблицу? вставка в существующую таблицу? это секционированная таблица? Вы вставляете в определенный раздел?   -  person David דודו Markovitz    schedule 19.03.2017
comment
Я создаю новую таблицу и сохраняю в ней действительные записи.   -  person Parameshwar    schedule 19.03.2017


Ответы (1)


Если hive.stats.autogather установлено в true, то статистика таблицы собирается автоматически, включая numRows.
Все, что вам нужно сделать в этом случае, это проверить статистику и принять любое решение, которое вы хотите.

Если это не так, просто выполните 2 select count(*) запроса, например -

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

P.s.

Это можно сделать одним запросом, но я думаю, что было бы лучше сохранить необработанные результаты, а не только 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
;

Проверить статистику таблиц

баш

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))

источник: 100, значение: 70, различие: 30

Еще один вариант — проверить статистику непосредственно из метасотры

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          |
+----------+-------------+
person David דודו Markovitz    schedule 19.03.2017