Nano Hash - криптовалюты, майнинг, программирование

Создать индекс Hive для сложного столбца

Можно создать индекс для сложного столбца в улье. Сложные, как в столбцах карты, структуры, массива и т. д.

Пример:

CREATE TABLE employees (
  name         STRING,
  salary       FLOAT,
  subordinates ARRAY<STRING>,
  deductions   MAP<STRING, FLOAT>,
  address      STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
PARTITIONED BY (country STRING, state STRING);

Следующее не работает:

CREATE INDEX employees_index
ON TABLE employees (address.street)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
WITH DEFERRED REBUILD;

FAILED: строка ParseException 2:28 не соответствует вводу '.' ожидание) рядом с «адресом» в операторе создания индекса


Ответы:


1

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

Цель индексации Hive — повысить скорость поиска запросов в определенных столбцах таблицы. Без индекса запросы с такими предикатами, как WHERE tab1.col1 = 10, загружают всю таблицу или раздел и обрабатывают все строки. Но если для столбца col1 существует индекс, то необходимо загрузить и обработать только часть файла. Повышение скорости запросов, которое может обеспечить индекс, достигается за счет дополнительной обработки для создания индекса и дискового пространства для хранения индекса.

Ниже приведен правильный способ создания индекса для сложного типа данных.

CREATE INDEX employees_index
ON TABLE employees (address)
AS ‘org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’
WITH DEFERRED REBUILD
IN TABLE employees_index_table
PARTITIONED BY (country,name)
COMMENT ‘index based on complex column’;

Давайте разберемся, как будет работать эта программа. Предположим, мы напишем следующий запрос:

 select * from employees where address.street='baker';

В этом пекаре элемент адреса (сложный тип STRUCT)
(например, улица: 'пекарь', город: 'лондон', штат: 'XYZ', почтовый индекс: 84902)

В приведенном выше примере запрос будет искать address.street='baker' в индексной таблице вместо загрузки всей таблицы.

Надеюсь, что вы найдете ее полезной. Спасибо.

23.05.2016

2

Мы можем создать индекс только для столбцов, а не для элементов столбца.

https://cwiki.apache.org/confluence/display/Hive/IndexDev

В приведенной вами таблице образцов address – это столбец, а address.street – элемент этого столбца.

Возможен указатель по адресу..

17.05.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..