Я пытаюсь решить проблему, когда все категории исходной таблицы доступны в target, а затем обрезают и загружают целевую таблицу, иначе ничего не делают.
Я не нашел никакого решения, просто используя куст и в конечном итоге использовал сценарий оболочки , чтобы решить эту проблему.
возможно ли избежать сценария оболочки?
Текущий подход:
create_ind_table.hql :
create temporary table temp.master_source_join
as select case when source.program_type_cd=master.program_type_cd then 1 else 0 end as IND
from source left join master
on source.program_type_cd=master.program_type_cd;
--if all the categoies from source persent in master then will contain 1 else 0'
drop table if exists temp.indicator;
create table temp.indicator
as select min(ind)*max(ind) as ind from master_source_join;
Ниже приведен скрипт, который я вызываю для Truncate и загрузки основной таблицы, если все основные исходные таблицы присутствуют в master.
tuncate_load_master.sh
beeline_cmd="beeline -u 'jdbc:hive2://abc.com:2181,abc1.com:2181,abc2.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2' --showHeader=flase --silent=true"
${beeline_cmd} -f create_ind_table.hql
## if indicator is 1 all the source category is present in master else not.
a=`${beeline_cmd} -e "select ind from temp.indicator;"`
temp=`echo $a | sed -e 's/-//g' | sed -e 's/+//g' | sed -e 's/|//g'`
echo $temp
if [ ${temp} -eq 1 ]
then
echo "truncate and load the traget table"
${beeline_cmd} -e "insert overwrite table temp.master select * from temp.source;"
else
echo "nothing to load"
fi