Массив структур в Hive. Как проверить вхождение в массив структуры по маске?

Ссылка скопирована
1 ответ

В таблице в hive есть поле

segments array<struct<id:bigint, lm:bigint, prob:float>>

Как я могу проверить, что в массив входят одновременно две структуры с id = 1 и id = 2 ?
Например:
[(1, 1699760620, 0.1), (2, 1699760620, 0.1), (3, 1699760620, 0.1)] -> True
[(1, 1699760620, 0.1), (3, 1699760620, 0.1), (3, 1699760620, 0.1)] -> False

Может быть как-то можно создать вычисляемое поле ids array<id>, которое будет содержать все id из массива структур (segments)? Тогда можно было бы просто написать

... WHERE 1 in ids and 2 in ids

Дополнительно:

В каком формате лежит таблица?

  • mayton2019,

    Массив структур в Hive. Как проверить вхождение в массив структуры по маске?

  • Я не знаю Hive, но если там поддерживается SQL explode - то разверни эти массивы на 90 градусов
    и получишь обычную таблицу и дальше реляционными операциями сделай нужные поиски.
  • mayton2019, так и сделал. Но всё равно хотелось бы найти подход более оптимальный.
  • Иван Мельников, оптимальный в чем? Есть разные пути оптимизации. По объему кода. По скорости вычислений. По объему занятой временной памяти для алгоритма. Если ты хочешь серъезно так... по честному провести сравнение то тебе нужна среда где можно измерять все эти параметры.

    Мой опыт подсказывает что в dbms обычно не ищут перфекционизма а просто берут то решение которое работает и то которое ДОСТАТОЧНО для выдачи ответа.

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Анна SEO Ответ

    Для проверки вхождения структуры в массив по маске в Hive можно воспользоваться функцией array_contains. Однако, данная функция работает только с простыми типами данных, а не со сложными структурами.

    Для решения этой проблемы можно воспользоваться функцией array_exists, которая позволяет проверить наличие элементов в массиве с использованием пользовательской функции. Ниже приведен пример использования функции array_exists для проверки вхождения структуры по маске:

    SELECT *
    FROM table_name
    WHERE array_exists(array_column, x -&gt; x.field1 = 'value1' AND x.field2 = 'value2');

    В данном запросе мы используем функцию array_exists для проверки массива структур array_column на наличие элемента, удовлетворяющего условию field1 = 'value1' и field2 = 'value2'. Если такой элемент найден, то строка будет включена в результат выборки.

    Таким образом, используя функцию array_exists в Hive, можно эффективно проверить вхождение структуры в массив по заданной маске.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно