虽然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等同物吗?
答案 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~';
希望这有帮助!