Функция indexOf одинаковая в HIVEQL - PullRequest
1 голос
/ 20 апреля 2020

У меня следующий запрос:

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)), но, похоже, это тоже не сработало.

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете объединить массив и использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...