【问题标题】:Is there a Hive equivalent of SQL “LIKE ANY ( SUBQUERY )”是否有与 SQL“LIKE ANY (SUBQUERY)”等效的 Hive
【发布时间】:2014-10-30 07:47:59
【问题描述】:

虽然 Hive 不支持 SQL 中支持的多值 LIKE 查询:例如

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等价物吗?

【问题讨论】:

标签: syntax hive hiveql


【解决方案1】:

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

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

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    这是一个涉及 Hive 中的 theta joins 的案例。有一个 wiki 页面和一个 jira 请求。请在此页面上查看详细信息:https://cwiki.apache.org/confluence/display/Hive/Theta+Join

    您的案例与页面上给出的Side-Table Similarity案例相似。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如何使用 EXISTS

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-05
          • 2010-12-03
          • 2019-09-12
          • 1970-01-01
          相关资源
          最近更新 更多