我有一个格式为
的配置单元查询select . . . from table1 left join (select . . . from table2) on (some_condition)
table2 可能不存在,具体取决于环境。所以我想加入,如果只有table2存在,否则只是忽略子查询。
以下查询返回table_name(如果存在),
show tables in {DB_NAME} like '{table_name}'
但是我不知道如何将它集成到我的查询中以便仅在它存在时进行选择。
在配置单元中是否有一种方法可以在选择之前检查表是否存在。
感谢任何帮助
注意:如果表格不存在,我不想创建表格。
答案 0 :(得分:0)
评论中已经提到,Hive不支持if-else
构造,因此,如果要使用它,则必须从bash或HPL/SQL等语言中借用它。 / p>
我在这里建议的结构如下:
view_ddl_if_exists.hql :
create view if not exists target_view
as
select . . . from table1 left join (select . . . from table2) on (some_condition)
view_ddl_if_not_exists.hql :
create view if not exists target_view
as
select . . . from table1
place_correct_view_source.sh
if hive -S -e 'explain select 1 from table2' &>/dev/null; then
cp view_ddl_if_exists.hql actual_view_ddl.hql
else
cp view_ddl_if_not_exists.hql actual_view_ddl.hql
fi
!bash place_correct_view_source.sh;
source actual_view_ddl.hql;
...
Voila!视图target_view
中的查询正确,可以在脚本中使用它。