HIVEQL 中的 indexOf 相似函数

Posted

技术标签:

【中文标题】HIVEQL 中的 indexOf 相似函数【英文标题】:indexOf alike function in HIVEQL 【发布时间】:2020-04-20 11:23:02 【问题描述】:

我有以下疑问:

SELECT
    col1,
    case when array_contains(col1, "c") then "c exists" end as col2
FROM
    (
    SELECT
        *
    FROM
        (
        SELECT
            array("a","b","c") AS col1 
        ) q1
    ) q2;

我想检查元素“c”是否出现在数组中的元素“b”之前。在 javascript 中我可以使用indexOf(),所以如果在 HiveQL 中有类似的东西我会做类似case when col1.indexOf("b") = col1.indexOf("c") - 1 的东西。

我已经阅读了文档,似乎处理数组的函数很少。

我不想拆分数组并使用LAGLEAD 进行检查。

我尝试过使用field("c", concat_ws(',',col1)),但这似乎也不起作用。

【问题讨论】:

【参考方案1】:

您可以连接数组并使用likerlike。示例:

SELECT  concat_ws(',',col1) rlike 'c,b' as c_before_b_flag
FROM
        (
        SELECT
            array("a","b","c") AS col1 
        ) q1

结果:

false

rlike 'b,c'true

【讨论】:

谢谢!不是我所期望的(我对真正的索引功能非常乐观),但它确实有效。我可以使用case when (concat_ws(',',col1) rlike 'b,c' = true) then 1 else 0 end as b_before_c_flag。尽管如此,正则表达式解决方案可以在逻辑发生一些变化时提供帮助,例如,如果我们允许 b 和 c 之间有 2 或 3 个其他元素 (f.i b,x,y,z,c) @agustin 使用case when (concat_ws(',',col1) rlike 'b,c' ) then 1 else 0 end。 = true 似乎是多余的,rlike 是布尔运算符,when 检查布尔值

以上是关于HIVEQL 中的 indexOf 相似函数的主要内容,如果未能解决你的问题,请参考以下文章

js工具函数

javascript常用函数

如何在大型矩阵中合并具有相似名称的列

pyhon字符串查找函数find(和java里的indexOf等效)

javascript 检查字符串与indexOf的相似性

Hive06-HiveQL:查询