1

我有以下查询:

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

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

我不想拆分数组并使用LAGor检查LEAD

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

4

1 回答 1

1

您可以连接数组并使用likeor rlike。例子:

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

于 2020-04-21T07:38:51.110 回答