Если 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