Серия Hive (шесть) — просмотр и указатель Hive

Apache Hive

1. Просмотр

1.1 Введение

Представления в Hive имеют ту же концепцию, что и представления в СУБД, и оба они являются логическими представлениями набора данных, которые по сути являются результирующим набором оператора SELECT. Представления — это чисто логические объекты без связанного хранилища (за исключением материализованных представлений, представленных в Hive 3.0.0). Когда запрос ссылается на представление, Hive может комбинировать определение представления с запросом, например, помещать фильтры в запрос вид средний.

1.2 Создание представления

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name   -- 视图名称
  [(column_name [COMMENT column_comment], ...) ]    --列名
  [COMMENT view_comment]  --视图注释
  [TBLPROPERTIES (property_name = property_value, ...)]  --额外信息
  AS SELECT ...;

Доступно в ульеCREATE VIEWСоздайте представление, если таблица или представление с таким именем уже существует, будет выдано исключение, рекомендуется использоватьIF NOT EXISTSпредварительное решение. При использовании представлений обратите внимание на следующее:

  • Представления доступны только для чтения и не могут использоваться в качестве целей для LOAD/INSERT/ALTER;

  • Представление фиксируется при его создании, и последующие изменения в базовой таблице (например, добавление столбцов) не будут отражаться в представлении;

  • Удаление базовой таблицы не удаляет представление, вам нужно удалить представление вручную;

  • Представления могут содержать предложения ORDER BY и LIMIT. Если оператор запроса, который ссылается на представление, также содержит такие предложения, его приоритет выполнения ниже, чем у соответствующего предложения представления. Например, видcustom_viewУкажите LIMIT 5, оператор запросаselect * from custom_view LIMIT 10, и в этом случае результат возвращает до 5 строк.

  • При создании представления имена столбцов автоматически получаются из оператора SELECT, если имена столбцов не указаны;

  • При создании представления, если оператор SELECT содержит другие выражения, такие как x + y, имена столбцов будут сгенерированы в виде _C0, _C1 и т. д.;

    CREATE VIEW  IF NOT EXISTS custom_view AS SELECT empno, empno+deptno , 1+2 FROM emp;
    

    https://github.com/heibaiying

1.3 Просмотр Просмотр

-- 查看所有视图: 没有单独查看视图列表的语句,只能使用 show tables
show tables;
-- 查看某个视图
desc view_name;
-- 查看某个视图详细信息
desc formatted view_name;

1.4 Удаление представления

DROP VIEW [IF EXISTS] [db_name.]view_name;

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

1.5 Изменить вид

ALTER VIEW [db_name.]view_name AS select_statement;

Изменяемое представление должно существовать, и представление не может иметь разделов, если представление имеет разделы, модификация завершается ошибкой.

1.6 Изменение свойств вида

грамматика:

ALTER VIEW [db_name.]view_name SET TBLPROPERTIES table_properties;
 
table_properties:
  : (property_name = property_value, property_name = property_value, ...)

Пример:

ALTER VIEW custom_view SET TBLPROPERTIES ('create'='heibaiying','date'='2019-05-05');

https://github.com/heibaiying

2. Указатель

2.1 Введение

Hive представил функцию индекса в версии 0.7.0. Цель разработки индекса — повысить скорость запросов к определенным столбцам таблицы. Без индекса запрос с предикатом (например, WHERE table1.column = 10) загружает всю таблицу или раздел и обрабатывает все строки. Но если индекс столбца существует, необходимо загрузить и обработать только часть файла.

2.2 Принцип индекса

Создание индекса для указанного столбца приведет к созданию таблицы индексов (структура таблицы следующая), и поля в ней включают: значение столбца индекса, путь к файлу HDFS, соответствующий значению, и смещение значения в файле. Когда запрос включает поле индекса, сначала перейдите к таблице индексов, чтобы найти путь к файлу HDFS и смещение, соответствующие значению столбца индекса, что позволяет избежать полного сканирования таблицы.

+--------------+----------------+----------+--+
|   col_name   |   data_type    | comment     |
+--------------+----------------+----------+--+
| empno        | int            |  建立索引的列  |   
| _bucketname  | string         |  HDFS 文件路径  |
| _offsets     | array<bigint>  |  偏移量       |
+--------------+----------------+----------+--+

2.3 Создайте индекс

CREATE INDEX index_name     --索引名称
  ON TABLE base_table_name (col_name, ...)  --建立索引的列
  AS index_type    --索引类型
  [WITH DEFERRED REBUILD]    --重建索引
  [IDXPROPERTIES (property_name=property_value, ...)]  --索引额外属性
  [IN TABLE index_table_name]    --索引表的名字
  [
     [ ROW FORMAT ...] STORED AS ...  
     | STORED BY ...
  ]   --索引表行分隔符 、 存储格式
  [LOCATION hdfs_path]  --索引表存储位置
  [TBLPROPERTIES (...)]   --索引表表属性
  [COMMENT "index comment"];  --索引注释

2.4 Индекс просмотра

--显示表上所有列的索引
SHOW FORMATTED INDEX ON table_name;

2.4 удалить индекс

При удалении индекса удаляется соответствующая индексная таблица.

DROP INDEX [IF EXISTS] index_name ON table_name;

Если таблица с индексом удалена, соответствующий индекс и индексная таблица будут удалены. Если удаляется раздел индексированной таблицы, индекс раздела, соответствующий этому разделу, также будет удален.

2.5 Перестроить индексы

ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;

Перестроить индексы. Если указано PARTITION, перестраиваются только индексы для этого раздела.

3. Индексный случай

3.1 Создайте индекс

на столе emp противempnoСоздание поля с именемemp_index, данные индекса хранятся вemp_index_tableиндексная таблица

create index emp_index on table emp(empno) as  
'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' 
with deferred rebuild 
in table emp_index_table ;

В настоящее время в индексной таблице нет данных, и индекс необходимо перестроить, чтобы иметь проиндексированные данные.

3.2 Перестроить индекс

alter index emp_index on emp rebuild; 

Hive запустит задание MapReduce для построения индекса.После создания индекса просмотрите данные таблицы индексов следующим образом. Три поля таблицы представляют: значение столбца индекса, путь к файлу HDFS, соответствующий значению, и смещение значения в файле.

https://github.com/heibaiying

3.3 Автоматическое использование индексов

По умолчанию, несмотря на то, что индекс установлен, Hive не будет автоматически использовать индекс при выполнении запросов, и необходимо включить соответствующую настройку. После включения конфигурации запросы, включающие индексированные столбцы, будут использовать функцию индексирования для оптимизации запроса.

SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.optimize.index.filter=true;
SET hive.optimize.index.filter.compact.minsize=0;

3.4 Индекс просмотра

SHOW INDEX ON emp;

https://github.com/heibaiying

В-четвертых, недостатки индекса

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

В то же время согласноофициальная документация, Hive удалит функцию индексации из версии 3.0 в основном по следующим двум причинам:

  • Материализованные представления с автоматическим переопределением могут иметь тот же эффект, что и индексы (в Hive 2.3.0 добавлена ​​поддержка материализованных представлений, официально представленных после версии 3.0).
  • При сохранении с использованием форматов файлов столбчатого хранения (Parquet, ORC) эти форматы поддерживают выборочное сканирование, которое может пропускать ненужные файлы или блоки.

Встроенная индексная функция ORC может обратиться к этой статье:Индекс ORC для оптимизации производительности Hive — индекс группы строк и индекс фильтра Блума

использованная литература

  1. Create/Drop/Alter View
  2. Materialized views
  3. Индекс улья
  4. Overview of Hive Indexes

Другие статьи серии больших данных можно найти в проекте с открытым исходным кодом GitHub.:Руководство для начинающих по большим данным