如果apache配置单元中存在表,请选择

irlmq6kh  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(315)

我有一个配置单元查询,它的格式是,

select . . . from table1 left join (select . . . from table2) on (some_condition)

根据环境的不同,表2可能不存在。所以如果只有table2存在,我想加入,否则就忽略子查询。
下面的查询返回表\u名称(如果存在),

show tables in {DB_NAME} like '{table_name}'

但我不知道如何将它集成到我的查询中,以便仅在它存在时进行选择。
在配置单元查询中是否有方法在选择之前检查表是否存在。
谢谢你的帮助
注意:如果表不存在,我不想创建它。

dohp0rv5

dohp0rv51#

评论中已经提到hive不支持它 if-else 构造,因此如果您想拥有它,就必须从bash或hpl/sql等语言中借用它。
我建议如下:
将查询的两个版本作为视图定义放置到单独的文件中:
如果存在,请查看\u ddl \u。hql:

create view if not exists target_view
as
select . . . from table1 left join (select . . . from table2) on (some_condition)

如果不存在,则查看\u ddl\u。hql:

create view if not exists target_view
as
select . . . from table1

添加用于检测实际视图定义并复制到预定义位置的shell脚本:
放置\u正确的\u视图\u 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

将以下内容添加到脚本/init脚本中:

!bash place_correct_view_source.sh;
source actual_view_ddl.hql;
...

瞧!视图中的查询是正确的 target_view 可以在你的剧本中使用。

相关问题