选择Apache Hive

时间:2018-03-29 18:29:39

标签: hadoop hive hiveql

我有一个格式为

的配置单元查询
select . . . from table1 left join (select . . . from table2) on (some_condition)

table2 可能不存在,具体取决于环境。所以我想加入,如果只有table2存在,否则只是忽略子查询。

以下查询返回table_name(如果存在),

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

但是我不知道如何将它集成到我的查询中以便仅在它存在时进行选择。

在配置单元中是否有一种方法可以在选择之前检查表是否存在。

感谢任何帮助

注意:如果表格不存在,我不想创建表格。

1 个答案:

答案 0 :(得分:0)

评论中已经提到,Hive不支持if-else构造,因此,如果要使用它,则必须从bash或HPL/SQL等语言中借用它。 / p>

我在这里建议的结构如下:

  1. 将查询的两个版本放入单独的文件中作为视图定义:

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
  1. 添加用于检测实际视图定义并将其复制到预定义位置的shell脚本:

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
  1. 在脚本/初始化脚本中添加以下内容:
!bash place_correct_view_source.sh;
source actual_view_ddl.hql;
...

Voila!视图target_view中的查询正确,可以在脚本中使用它。