Syntax 是否存在与SQL“;与任何(子查询)一样&x201D;

Syntax 是否存在与SQL“;与任何(子查询)一样&x201D;,syntax,hive,hiveql,Syntax,Hive,Hiveql,而配置单元不支持SQL:ex中支持的多值类查询 SELECT * FROM user_table WHERE first_name LIKE ANY ( 'root~%' , 'user~%' ); 我们可以将其转换为等效的配置单元查询,如下所示: SELECT * FROM user_table WHERE first_name LIKE 'root~%' OR first_name LIKE 'user~%' 有人知道Hive在子查询与LIKE一起使用时支持的等效解决方案吗?请看下面的

而配置单元不支持SQL:ex中支持的多值类查询

SELECT * FROM user_table WHERE first_name LIKE ANY ( 'root~%' , 'user~%' );
我们可以将其转换为等效的配置单元查询,如下所示:

SELECT * FROM user_table WHERE first_name LIKE 'root~%' OR first_name LIKE 'user~%' 
有人知道Hive在子查询与LIKE一起使用时支持的等效解决方案吗?请看下面的示例:

SELECT * FROM user_table WHERE first_name LIKE ANY ( SELECT expr FROM exprTable);

由于表达式中没有值,我不能使用相同的方法来生成用OR/AND运算符分隔的多个类表达式。最初我想为它编写HiveUDF?你能帮我支持这样的表达并找到蜂巢的等价物吗

这是一个涉及蜂巢中θ连接的案例。有一个wiki页面用于此和jira请求。请浏览本页此处的详细信息:


您的案例类似于页面上给出的边表相似性案例。

您需要将expr值转换为一个映射,然后使用正则表达式来查找类似的值。或者,您也可以将union all与单独SQL中的所有类似表达式一起使用-查询可能会变得单调乏味,因此您可以通过编程方式生成它。

使用union all如何

SELECT * FROM user_table WHERE EXISTS ( SELECT * FROM exprTable WHERE first_name LIKE expr );

您可以使用Hive的RLIKE关系运算符,如下所示

SELECT * FROM user_table WHERE first_name RLIKE 'root~|user~|admin~';

希望这有帮助

这些问题相隔1年,因此可能在发布时解决方案不可用,但我认为这是一个好的解决方案: