Hadoop 选择Apache配置单元中是否存在表

Hadoop 选择Apache配置单元中是否存在表,hadoop,hive,hiveql,Hadoop,Hive,Hiveql,我有一个配置单元查询,其格式为 select . . . from table1 left join (select . . . from table2) on (some_condition) 根据环境的不同,表2可能不存在。因此,如果只有table2存在,我想加入,否则忽略子查询 下面的查询返回表_名称(如果存在) show tables in {DB_NAME} like '{table_name}' 但是我不知道如何将它集成到我的查询中,以便仅在它存在时进行选择 在配置单元查询中是否

我有一个配置单元查询,其格式为

select . . . from table1 left join (select . . . from table2) on (some_condition)
根据环境的不同,表2可能不存在。因此,如果只有table2存在,我想加入,否则忽略子查询

下面的查询返回表_名称(如果存在)

show tables in {DB_NAME} like '{table_name}'
但是我不知道如何将它集成到我的查询中,以便仅在它存在时进行选择

在配置单元查询中是否有方法在选择之前检查表是否存在

谢谢你的帮助


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

注释中已经提到,Hive不支持if-else构造,因此如果您想要它,您必须从bash或其他语言借用它

我在这里建议的是以下结构:

将查询的两个版本作为视图定义放置到单独的文件中: 如果存在,则查看ddl。hql:

如果目标视图不存在,则创建视图 像 选择从表1左连接选择。根据表2的某些条件 如果不存在,则查看ddl。hql:

如果目标视图不存在,则创建视图 像 选择来自表1 添加用于检测实际视图定义并复制到预定义位置的shell脚本: 放置\u正确的\u视图\u source.sh

如果hive-S-e“explain从表2中选择1”&>/dev/null;然后 cp视图\u ddl\u如果存在。hql实际\u视图\u ddl.hql 其他的 cp视图\u ddl\u如果不存在。hql实际\u视图\u ddl.hql fi 将以下内容添加到脚本/init脚本中: !bash place\u correct\u view\u source.sh; 源实际视图ddl.hql; ...
瞧!您在视图目标视图中获得了正确的查询,可以在脚本中使用它。

如果创建一个虚拟表,如果不存在,则不存在和选项;那么不幸的是,它可能无法完全实现使用蜂巢。配置单元命令当前不支持诸如if条件之类的编程功能。我认为您应该考虑使用shell脚本来执行配置单元脚本,并在执行之前检查特定条件。如果有效的话,请告诉我。好的观点@gyan。我想到了这一点,但是配置单元查询有多个子查询和嵌套查询。尝试使用shell来实现这一点会使它更加复杂。如果找不到替代者,我会试试的。另外,我只是想检查一下在hiveWelcome@Maverick中是否还有其他选择。我相信将查询分解成若干部分并有条件地使用shell脚本执行它们会使它更易于管理和移植。@Maverick那么你做了什么?@Suvarnapatayil:我找不到实现它的方法。我为不同的环境编写了不同的查询。在我的例子中,我希望对所有环境都有一个通用查询