是否有一个Hive相当于SQL“LIKE ANY(SUBQUERY)”

时间:2014-10-30 07:47:59

标签: syntax hive hiveql

虽然Hive不支持SQL支持的多值LIKE查询:ex。

SELECT * FROM user_table WHERE first_name LIKE ANY ( 'root~%' , 'user~%' );

我们可以将其转换为等效的HIVE查询:

SELECT * FROM user_table WHERE first_name LIKE 'root~%' OR first_name LIKE 'user~%' 

如果子查询与LIKE一起使用,有没有人知道Hive支持的等效解决方案?看看下面的例子:

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

因为它没有表达式中的值,所以我不能使用相同的方法来生成用OR / AND运算符分隔的多个LIKE表达式。最初我想过为它编写HIVE UDF?能帮助我支持这种表达并找到HIVE等同物吗?

4 个答案:

答案 0 :(得分:0)

这是一个涉及Hive中的theta连接的案例。这是一个维基页面和一个jira请求。请仔细阅读此页面上的详细信息:https://cwiki.apache.org/confluence/display/Hive/Theta+Join

您的情况类似于页面上提供的 Side-Table Similarity 情况。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用EXISTS怎么样

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

答案 3 :(得分:0)

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

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

希望这有帮助!