在HIVEQL中的indexOf相似函数



我有以下查询:

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)),但似乎也不起作用。

您可以连接数组并使用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

最新更新