我有以下查询:
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
的事情。
我已经阅读了文档,处理数组的函数似乎是最小的。
我不想拆分数组并使用LAG
或LEAD
进行检查。
我试过使用field("c", concat_ws(',',col1))
,但似乎也不起作用。
您可以连接数组并使用like
或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