Коннектор Hive#

Коннектор Hive позволяет запрашивать данные, хранящиеся в хранилище данных Apache Hive. Hive состоит из трех компонентов:
Файлы данных в различных форматах, которые обычно хранятся в Hadoop Distributed File System (HDFS) или в системах объектного хранения, таких как Amazon S3.
Метаданные о том, как файлы данных сопоставлены со схемами и таблицами. Эти метаданные хранятся в базе данных, например MySQL, и доступны через сервис Hive metastore.
Язык запросов HiveQL. Этот язык запросов выполняется на распределенном вычислительном фреймворке, таком как MapReduce или Tez.
Trino использует только первые два компонента: данные и метаданные. Он не использует HiveQL или какую-либо часть среды выполнения Hive.
Требования#
Коннектор Hive требует сервис Hive metastore (HMS) или совместимую реализацию Hive metastore, такую как AWS Glue.
Необходимо выбрать и настроить поддерживаемую файловую систему в файле конфигурации каталога.
Координатор и все workers должны иметь сетевой доступ к Hive metastore и системе хранения. Доступ к Hive metastore по протоколу Thrift по умолчанию использует порт 9083.
Файлы данных должны быть в поддерживаемом формате. Форматы файлов можно
настроить с помощью свойства таблицы format и других
специальных свойств:
Для serializable-форматов разрешены только определенные SerDes:
RCText - RCFile с использованием
ColumnarSerDeRCBinary - RCFile с использованием
LazyBinaryColumnarSerDeSequenceFile с
org.apache.hadoop.io.TextSequenceFile с
org.apache.hadoop.io.BytesWritable, содержащим записи protocol buffer с использованиемcom.twitter.elephantbird.hive.serde.ProtobufDeserializerCSV - с использованием
org.apache.hadoop.hive.serde2.OpenCSVSerdeJSON - с использованием
org.apache.hive.hcatalog.data.JsonSerDeOPENX_JSON - OpenX JSON SerDe из
org.openx.data.jsonserde.JsonSerDe. Дополнительные сведения о реализации Trino см. в исходном репозитории.TextFile
ESRI - с использованием
com.esri.hadoop.hive.serde.EsriJsonSerDe
Общая конфигурация#
Чтобы настроить коннектор Hive, создайте файл свойств каталога
etc/catalog/example.properties, который ссылается на коннектор hive.
Необходимо настроить metastore для метаданных.
Необходимо выбрать и настроить одну из поддерживаемых файловых систем.
connector.name=hive
hive.metastore.uri=thrift://example.net:9083
fs.x.enabled=true
Замените свойство конфигурации fs.x.enabled нужной файловой системой.
Если в качестве metastore используется AWS Glue,
вместо этого необходимо установить hive.metastore в glue:
connector.name=hive
hive.metastore=glue
У каждого типа metastore есть специальные свойства конфигурации, а также General metastore configuration properties.
Несколько кластеров Hive#
Вы можете иметь столько каталогов, сколько нужно. Если у вас есть
дополнительные кластеры Hive, просто добавьте еще один файл свойств в
etc/catalog с другим именем, убедившись, что оно заканчивается на
.properties. Например, если назвать файл свойств sales.properties, Trino
создаст каталог sales с использованием настроенного коннектора.
Общие свойства конфигурации Hive#
В следующей таблице перечислены общие свойства конфигурации коннектора Hive. Дополнительные наборы свойств конфигурации приведены в других разделах документации коннектора Hive.
Имя свойства |
Описание |
По умолчанию |
|---|---|---|
|
Включает чтение данных из подкаталогов расположений таблиц или партиций.
Если отключено, подкаталоги игнорируются. Это эквивалентно свойству Hive
|
|
|
Игнорировать партиции, когда расположение в файловой системе не существует, вместо завершения запроса ошибкой. Это пропускает данные, которые могли ожидаться как часть таблицы. |
|
|
Формат файлов по умолчанию, используемый при создании новых таблиц. |
|
|
Доступ к столбцам ORC по имени. По умолчанию доступ к столбцам в файлах ORC
выполняется по их порядковой позиции в определении таблицы Hive.
Эквивалентное свойство сеанса каталога — |
|
|
По умолчанию доступ к столбцам Parquet выполняется по имени. Установите это
свойство в |
|
|
Часовой пояс для чтения и записи Parquet. |
По умолчанию JVM |
|
Кодек сжатия, используемый при записи файлов. Возможные значения: |
|
|
Принудительно планировать splits на том же узле, где работает процесс Hadoop DataNode, обслуживающий данные split. Это полезно для установок, где Trino размещен совместно с каждым DataNode. |
|
|
Следует ли записывать новые партиции с использованием существующего формата таблицы или формата Trino по умолчанию? |
|
|
Можно ли вставлять новые данные в существующие партиции? Если |
|
|
Что происходит при вставке данных в существующую партицию? Возможные значения:
Эквивалентное свойство сеанса каталога —
|
|
|
Максимальный размер новых файлов по принципу best effort. |
|
|
Следует ли создавать пустые файлы для buckets без данных? |
|
|
Включает проверку, что данные находятся в правильном bucket при чтении bucketed-таблиц. |
|
|
Задает количество партиций для анализа при вычислении статистики таблицы. |
100 |
|
Максимальное количество партиций на writer. |
100 |
|
Максимальное количество партиций для одного сканирования таблицы, которые предварительно загружаются на координаторе. Некоторые оптимизации невозможны без eager loading. |
100,000 |
|
Максимальное количество партиций для одного сканирования таблицы. |
1,000,000 |
|
Включает запись в non-managed (внешние) таблицы Hive. |
|
|
Включает создание non-managed (внешних) таблиц Hive. |
|
|
Включает автоматический сбор статистики на уровне столбцов при записи. Подробности см. в Статистика таблиц. |
|
|
Кешировать список каталогов для определенных таблиц. Примеры:
|
|
|
Если
|
|
|
Максимальный удерживаемый размер кешированных записей состояния файлов. |
|
|
Как долго кешированный список каталога считается действительным. |
|
|
Максимальный удерживаемый размер всех записей в кеше состояния файлов на транзакцию. Ограничение удерживаемого размера общее для всех выполняющихся запросов. |
|
|
Корректирует двоично закодированные значения timestamp к указанному часовому поясу. Для Hive 3.1+ должно быть установлено UTC. |
По умолчанию JVM |
|
Задает точность для столбцов Hive типа |
|
|
Управляет тем, используется ли временный staging-каталог, настроенный в
|
|
|
Управляет расположением временного staging-каталога, используемого для
операций записи. Заполнитель |
|
|
Включает трансляцию для представлений Hive. |
|
|
Использовать legacy-алгоритм для трансляции представлений
Hive. Для временного использования в конкретном каталоге можно
использовать свойство сеанса каталога |
|
|
Улучшает параллелизм записи partitioned и bucketed таблиц. Если отключено, количество потоков записи ограничено количеством buckets. |
|
|
Установите в |
|
|
Позволяет указать список схем, для которых Trino будет требовать, чтобы
запросы использовали фильтр по ключам партиций для исходных таблиц. Список
можно указать с помощью |
|
|
Включает Статистика таблиц. Эквивалентное свойство сеанса
каталога для использования в конкретном сеансе —
|
|
|
Задает значение по умолчанию для свойства таблицы auto_purge у managed таблиц. Дополнительные сведения об auto_purge см. в Свойства таблицы. |
|
|
Включает поддержку Athena partition projection |
|
|
Фильтровать объекты S3 по их классу хранения и статусу восстановления, если применимо. Возможные значения:
|
|
|
Максимальное количество партиций, удаляемых одним запросом. |
100,000 |
|
Максимальное количество партиций, обрабатываемых в одном batch. |
100 |
|
Включает auto-commit для всех записей. Это можно использовать, чтобы запретить транзакции записи с несколькими операторами. |
|
|
Количество потоков, используемых для получения метаданных. В настоящее время параллелизована только загрузка таблиц. |
|
|
Путь к каталогу, где хранятся двоичные файлы дескрипторов Protocol Buffer,
используемые для чтения таблиц, сохраненных в формате
|
|
|
Максимальный размер кеша дескрипторов Protocol Buffer |
|
|
Длительность, после которой загруженные дескрипторы Protocol Buffer должны быть повторно загружены с диска. |
|
Конфигурация доступа к файловой системе#
Коннектор поддерживает доступ к следующим файловым системам:
Необходимо включить и настроить доступ к конкретной файловой системе. Legacy-поддержка не рекомендуется и будет удалена.
Поддержка отказоустойчивого выполнения#
Коннектор поддерживает Fault-tolerant execution для обработки запросов. Операции чтения и записи поддерживаются с любой политикой повторных попыток для нетранзакционных таблиц.
Операции чтения поддерживаются с любой политикой повторных попыток для
транзакционных таблиц. Операции записи и операции CREATE TABLE ... AS не
поддерживаются с какой-либо политикой повторных попыток для транзакционных
таблиц.
Безопасность#
Коннектор поддерживает разные способы аутентификации для используемой файловой системы и metastore.
Кроме того, поддерживаются следующие возможности, связанные с безопасностью.
Шифрование Parquet#
Коннектор Hive поддерживает чтение файлов Parquet, зашифрованных с помощью Parquet Modular Encryption (PME). Ключи расшифровки можно передать через переменные окружения. Запись зашифрованных файлов Parquet не поддерживается.
Имя свойства |
Описание |
По умолчанию |
|---|---|---|
|
Включает средство получения ключей, которое читает ключи расшифровки из переменных окружения. |
|
|
Префикс AAD, используемый при декодировании файлов Parquet. Должен совпадать с префиксом, использованным при записи файлов, если применимо. |
|
|
Проверять подпись для plaintext footer файлов. |
|
Когда установлено pme.environment-key-retriever.enabled, передайте ключи через
переменные окружения:
pme.environment-key-retriever.footer-keyspme.environment-key-retriever.column-keys
Каждая переменная принимает либо один ключ в кодировке base64, либо список пар
id:key через запятую (ключи в кодировке base64), где id должен
соответствовать метаданным ключа, встроенным в файл Parquet.
Поддержка SQL#
Коннектор предоставляет доступ на чтение и запись к данным и метаданным в настроенной системе объектного хранения и хранилищах метаданных:
Глобально доступные операторы; см. также глобально доступные операторы
Операции безопасности: см. также авторизацию объектного хранилища на основе стандарта SQL
Практические рекомендации по миграции с Hive на Trino см. в руководстве по миграции.
В следующих разделах приведена информация о поддержке SQL, специфичная для Hive.
Базовые примеры использования#
Приведенные здесь примеры работают в Google Cloud Storage, если заменить
s3:// на gs://.
Создайте новую таблицу Hive с именем page_views в схеме web, которая
хранится в формате файлов ORC, партиционирована по дате и стране и bucketed по
пользователю на 50 buckets. Обратите внимание, что Hive требует, чтобы
столбцы партиций были последними столбцами в таблице:
CREATE TABLE example.web.page_views (
view_time TIMESTAMP,
user_id BIGINT,
page_url VARCHAR,
ds DATE,
country VARCHAR
)
WITH (
format = 'ORC',
partitioned_by = ARRAY['ds', 'country'],
bucketed_by = ARRAY['user_id'],
bucket_count = 50
)
Создайте новую схему Hive с именем web, которая хранит таблицы в bucket S3 с
именем my-bucket:
CREATE SCHEMA example.web
WITH (location = 's3://my-bucket/')
Удалите схему:
DROP SCHEMA example.web
Удалите партицию из таблицы page_views:
DELETE FROM example.web.page_views
WHERE ds = DATE '2016-08-09'
AND country = 'US'
Запросите таблицу page_views:
SELECT * FROM example.web.page_views
Выведите список партиций таблицы page_views:
SELECT * FROM example.web."page_views$partitions"
Создайте внешнюю таблицу Hive с именем request_logs, которая указывает на
существующие данные в S3:
CREATE TABLE example.web.request_logs (
request_time TIMESTAMP,
url VARCHAR,
ip VARCHAR,
user_agent VARCHAR
)
WITH (
format = 'TEXTFILE',
external_location = 's3://my-bucket/data/logs/'
)
Соберите статистику для таблицы request_logs:
ANALYZE example.web.request_logs;
Удалите внешнюю таблицу request_logs. Это удаляет только метаданные таблицы.
Каталог данных, на который она ссылается, не удаляется:
DROP TABLE example.web.request_logs
CREATE TABLE AS можно использовать для создания транзакционных таблиц в формате ORC следующим образом:
CREATE TABLE <name> WITH ( format='ORC', transactional=true ) AS <query>
Добавьте пустую партицию в таблицу page_views:
CALL system.create_empty_partition(
schema_name => 'web',
table_name => 'page_views',
partition_columns => ARRAY['ds', 'country'],
partition_values => ARRAY['2016-08-09', 'US']);
Удалите статистику для партиции таблицы page_views:
CALL system.drop_stats(
schema_name => 'web',
table_name => 'page_views',
partition_values => ARRAY[ARRAY['2016-08-09', 'US']]);
Таблицы, созданные в Hive с помощью
Twitter Elephantbird
поддерживаются для чтения. Двоичный protobuf-дескриптор, указанный в
serialization.class, должен храниться в каталоге, настроенном через
hive.protobuf.descriptors.location на каждом worker.
...
row format serde "com.twitter.elephantbird.hive.serde.ProtobufDeserializer"
with serdeproperties (
"serialization.class"="com.example.proto.gen.Storage$User"
)
Процедуры#
Используйте оператор CALL для выполнения задач манипуляции данными
или администрирования. Процедуры должны включать квалифицированное имя каталога,
если ваш каталог Hive называется web:
CALL web.system.example_procedure()
Доступны следующие процедуры:
system.create_empty_partition(schema_name, table_name, partition_columns, partition_values)Создает пустую партицию в указанной таблице.
system.sync_partition_metadata(schema_name, table_name, mode, case_sensitive)Проверяет и обновляет список партиций в metastore. Доступны три режима:
ADD: добавить все партиции, существующие в файловой системе, но отсутствующие в metastore.DROP: удалить все партиции, существующие в metastore, но отсутствующие в файловой системе.FULL: выполнить иADD, иDROP.
Аргумент
case_sensitiveнеобязателен. Значение по умолчаниюtrueиспользуется для совместимости с поведением HiveMSCK REPAIR TABLE, которое ожидает, что имена столбцов партиций в путях файловой системы будут в нижнем регистре (например,col_x=SomeValue). Партиции в файловой системе, не соответствующие этому соглашению, игнорируются, если аргумент не установлен вfalse.system.drop_stats(schema_name, table_name, partition_values)Удаляет статистику для подмножества партиций или всей таблицы. Партиции задаются как массив, элементы которого являются массивами значений партиций (аналогично аргументу
partition_valuesвcreate_empty_partition). Если аргументpartition_valuesопущен, статистика удаляется для всей таблицы.
system.register_partition(schema_name, table_name, partition_columns, partition_values, location)Регистрирует существующее расположение как новую партицию в metastore для указанной таблицы.
Если аргумент
locationопущен, расположение партиции строится с использованиемpartition_columnsиpartition_values.По соображениям безопасности процедура включена только когда
hive.allow-register-partition-procedureустановлено вtrue.
system.unregister_partition(schema_name, table_name, partition_columns, partition_values)Отменяет регистрацию указанной существующей партиции в metastore для указанной таблицы. Данные партиции не удаляются.
system.flush_metadata_cache()Очищает все кеши метаданных Hive.
system.flush_metadata_cache(schema_name => ..., table_name => ...)Очищает записи кеша метаданных Hive, связанные с выбранной таблицей. Процедура требует передачи именованных параметров.
system.flush_metadata_cache(schema_name => ..., table_name => ..., partition_columns => ARRAY[...], partition_values => ARRAY[...])Очищает записи кеша метаданных Hive, связанные с выбранной партицией. Процедура требует передачи именованных параметров.
Управление данными#
Функциональность Управление данными включает поддержку операторов
INSERT, UPDATE, DELETE и MERGE; точная поддержка зависит от системы
хранения, формата файлов и metastore.
При подключении к Hive metastore версии 3.x коннектор Hive поддерживает чтение из insert-only и ACID таблиц и запись в них, с полной поддержкой partitioning и bucketing.
DELETE, примененный к нетранзакционным таблицам, поддерживается
только если таблица партиционирована и предложение WHERE соответствует целым
партициям. Транзакционные таблицы Hive в формате ORC поддерживают удаление
“row-by-row”, при котором предложение WHERE может соответствовать
произвольным наборам строк.
UPDATE поддерживается только для транзакционных таблиц Hive в
формате ORC. UPDATE столбцов партиций или buckets не поддерживается.
MERGE поддерживается только для ACID-таблиц.
ACID tables created with Hive Streaming Ingest не поддерживаются.
Управление схемами и таблицами#
Коннектор Hive поддерживает запросы и управление таблицами и схемами Hive (базами данных). Хотя некоторые редкие операции необходимо выполнять напрямую в Hive, большинство операций можно выполнять с помощью Trino.
Эволюция схемы#
Партиции таблицы Hive могут отличаться от текущей схемы таблицы. Это происходит когда типы данных столбцов таблицы изменяются относительно типов данных столбцов уже существующих партиций. Коннектор Hive поддерживает такую эволюцию схемы, разрешая те же преобразования, что и Hive. В следующей таблице перечислены возможные преобразования типов данных.
Тип данных |
Преобразуется в |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Любая ошибка преобразования приводит к null, что соответствует поведению Hive.
Например, преобразование строки 'foo' в число или преобразование строки
'1234' в TINYINT (у которого максимальное значение 127).
Эволюция схемы Avro#
Trino поддерживает запросы и управление таблицами Hive с форматом хранения Avro, где схема задается на основе файла/литерала схемы Avro. Trino также может создавать таблицы, выводя схему из допустимого файла схемы Avro, расположенного локально или удаленно в HDFS/на веб-сервере.
Чтобы указать, что для интерпретации данных таблицы должна использоваться схема
Avro, используйте свойство таблицы avro_schema_url.
Схему можно разместить в локальной файловой системе или удаленно в следующих расположениях:
HDFS (e.g.
avro_schema_url = 'hdfs://user/avro/schema/avro_data.avsc')S3 (e.g.
avro_schema_url = 's3n:///schema_bucket/schema/avro_data.avsc')Веб-сервер (например,
avro_schema_url = 'http://example.org/schema/avro_data.avsc')
URL, где находится схема, должен быть доступен из Hive metastore и узлов координатора/workers Trino.
В качестве альтернативы можно использовать свойство таблицы
avro_schema_literal для определения схемы Avro.
Таблица, созданная в Trino с использованием свойства avro_schema_url или
avro_schema_literal, ведет себя так же, как таблица Hive с установленным
avro.schema.url или avro.schema.literal.
Пример:
CREATE TABLE example.avro.avro_data (
id BIGINT
)
WITH (
format = 'AVRO',
avro_schema_url = '/usr/local/avro_data.avsc'
)
Столбцы, перечисленные в DDL (id в примере выше), игнорируются, если указан
avro_schema_url. Схема таблицы соответствует схеме в файле схемы Avro. Перед
любой операцией чтения выполняется обращение к схеме Avro, поэтому результат
запроса отражает любые изменения схемы. Таким образом Trino использует
возможности обратной совместимости Avro.
Если схема таблицы изменяется в файле схемы Avro, новую схему все еще можно использовать для чтения старых данных. Новые или переименованные поля должны иметь значение по умолчанию в файле схемы Avro.
Поведение эволюции схемы следующее:
Столбец добавлен в новой схеме: данные, созданные со старой схемой, возвращают значение по умолчанию, когда таблица использует новую схему.
Столбец удален в новой схеме: данные, созданные со старой схемой, больше не выводят данные из удаленного столбца.
Столбец переименован в новой схеме: это эквивалентно удалению столбца и добавлению нового, и данные, созданные со старой схемой, возвращают значение по умолчанию, когда таблица использует новую схему.
Изменение типа столбца в новой схеме: если приведение типа поддерживается Avro или коннектором Hive, выполняется преобразование. Для несовместимых типов выдается ошибка.
Ограничения#
Следующие операции не поддерживаются, когда установлен avro_schema_url:
CREATE TABLE ASне поддерживается.Столбцы bucketing (
bucketed_by) не поддерживаются вCREATE TABLE.Команды
ALTER TABLE, изменяющие столбцы, не поддерживаются.
ALTER TABLE EXECUTE#
Коннектор поддерживает следующие команды для использования с ALTER TABLE EXECUTE.
optimize#
Команда optimize используется для перезаписи содержимого указанной таблицы
так, чтобы оно было объединено в меньшее число более крупных файлов. Если
таблица секционирована, компактирование данных применяется отдельно к каждой
секции, выбранной для оптимизации. Эта операция повышает производительность
чтения.
Объединяются все файлы с размером меньше необязательного параметра
file_size_threshold (значение порога по умолчанию — 100MB):
ALTER TABLE test_table EXECUTE optimize
Следующий оператор объединяет в таблице файлы размером меньше 128 мегабайт:
ALTER TABLE test_table EXECUTE optimize(file_size_threshold => '128MB')
Можно использовать предложение WHERE со столбцами, по которым секционирована
таблица, чтобы отфильтровать секции для оптимизации:
ALTER TABLE test_partitioned_table EXECUTE optimize
WHERE partition_key = 1
Можно использовать более сложное предложение WHERE, чтобы сузить область
действия процедуры optimize. В следующем примере значения меток времени
приводятся к датам, а сравнение используется для оптимизации только секций с
данными за 2022 год или более поздними:
ALTER TABLE test_table EXECUTE optimize
WHERE CAST(timestamp_tz AS DATE) > DATE '2021-12-31'
Команда optimize по умолчанию отключена и может быть включена для каталога с
помощью свойства сеанса <catalog-name>.non_transactional_optimize_enabled:
SET SESSION <catalog_name>.non_transactional_optimize_enabled=true
Warning
Поскольку таблицы Hive нетранзакционные, обратите внимание на следующие возможные последствия:
Если запросы выполняются к таблицам, которые в данный момент оптимизируются, могут быть прочитаны дублирующиеся строки.
В редких случаях, когда во время операции
optimizeвозникают исключения, требуется ручная очистка каталога таблицы. В этой ситуации обратитесь к журналам Trino и сообщениям об ошибке запроса, чтобы узнать, какие файлы нужно удалить.
Свойства таблицы#
Свойства таблицы предоставляют или задают метаданные для базовых таблиц. Это ключевой элемент для операторов CREATE TABLE AS. Свойства таблицы передаются коннектору с помощью предложения WITH:
CREATE TABLE tablename
WITH (format='CSV',
csv_escape = '"')
Имя свойства |
Описание |
По умолчанию |
|---|---|---|
|
Указывает настроенному metastore выполнять purge при удалении таблицы или партиции вместо мягкого удаления через trash. |
|
|
URI, указывающий на Эволюция схемы Avro для таблицы. |
|
|
Количество buckets для группировки данных. Допустимо только при
использовании с |
0 |
|
Столбец bucketing для таблицы хранения. Допустимо только при использовании
с |
|
|
Указывает, какую версию Hive bucketing использовать. Допустимые значения:
|
|
|
Escape-символ CSV. Требует формат CSV. |
|
|
Символ кавычек CSV. Требует формат CSV. |
|
|
Символ-разделитель CSV. Требует формат CSV. Можно использовать другие
разделители, такие как |
|
|
URI для внешней таблицы Hive на S3, Azure Blob Storage и т. д. Дополнительные сведения см. в Базовые примеры использования. |
|
|
Формат файлов таблицы. Допустимые значения включают |
|
|
Формат сериализации для значения |
|
|
Список столбцов через запятую для ORC bloom filter. Улучшает
производительность запросов, использующих предикаты равенства, такие как
|
|
|
Вероятность ложноположительного срабатывания ORC bloom filters. Требует формат ORC. |
0.05 |
|
Столбец партиционирования для таблицы хранения. Столбцы, перечисленные в
предложении |
|
|
Список столбцов через запятую для Parquet bloom filter. Улучшает
производительность запросов, использующих предикаты равенства, такие как
|
|
|
Количество строк footer, игнорируемых при разборе файла данных. Требует таблицы формата TextFile или CSV. |
|
|
Количество строк header, игнорируемых при разборе файла данных. Требует таблицы формата TextFile или CSV. |
|
|
Столбец для сортировки, используемый для определения bucketing строки.
Допустимо только если также указаны |
|
|
Позволяет использовать пользовательские разделители полей, такие как ‘|’, для таблиц формата TextFile. |
|
|
Позволяет использовать пользовательский escape-символ для таблиц формата TextFile. |
|
|
Установите это свойство в |
|
|
Включает partition projection для выбранной таблицы. Сопоставляется из свойства таблицы AWS Athena table property projection.enabled. |
|
|
Игнорировать любые свойства partition projection, сохраненные в metastore для выбранной таблицы. Это свойство только Trino, позволяющее обойти проблемы совместимости для конкретной таблицы; если оно включено, Trino игнорирует все остальные параметры конфигурации, связанные с partition projection. |
|
|
Шаблон расположения projected partition, например |
|
|
Дополнительные свойства, добавленные к таблице Hive. Эти свойства не
используются Trino и доступны в metadata-таблице |
Metadata-таблицы#
Сырые свойства таблицы Hive доступны как скрытая таблица, содержащая отдельный столбец для каждого свойства таблицы и одну строку со значениями свойств.
Таблица $properties#
Имя таблицы свойств составляется из имени таблицы с добавленным $properties.
Она предоставляет параметры таблицы в metastore.
Имена и значения свойств можно посмотреть простым запросом:
SELECT * FROM example.web."page_views$properties";
stats_generated_via_stats_task | auto.purge | trino_query_id | trino_version | transactional
---------------------------------------------+------------+-----------------------------+---------------+---------------
workaround for potential lack of HIVE-12730 | false | 20230705_152456_00001_nfugi | 434 | false
Таблица $partitions#
Таблица $partitions предоставляет список всех значений партиций
партиционированной таблицы.
Следующий пример запроса возвращает все значения партиций из таблицы
page_views в схеме web каталога example:
SELECT * FROM example.web."page_views$partitions";
day | country
------------+---------
2023-07-01 | POL
2023-07-02 | POL
2023-07-03 | POL
2023-03-01 | USA
2023-03-02 | USA
Свойства столбцов#
Имя свойства |
Описание |
По умолчанию |
|---|---|---|
|
Определяет тип проекции секций, используемый для этого столбца. Может
использоваться только для столбцов секционирования. Доступные типы: |
|
|
Используется с |
|
|
Используется с |
|
|
Используется с |
|
|
Используется с |
|
|
Используется с |
|
|
Используется с |
Metadata-столбцы#
Помимо определенных столбцов, коннектор Hive автоматически предоставляет метаданные в нескольких скрытых столбцах каждой таблицы:
$bucket: номер bucket для этой строки$path: полный путь файловой системы к файлу для этой строки$file_modified_time: дата и время последнего изменения файла для этой строки$file_size: размер файла для этой строки$partition: имя партиции для этой строки
Эти столбцы можно использовать в SQL-операторах как любые другие столбцы. Их можно выбирать напрямую или использовать в условных операторах. Например, можно просмотреть размер файла, расположение и партицию для каждой записи:
SELECT *, "$path", "$file_size", "$partition"
FROM example.web.page_views;
Получите все записи, принадлежащие файлам, хранящимся в партиции
ds=2016-08-09/country=US:
SELECT *, "$path", "$file_size"
FROM example.web.page_views
WHERE "$partition" = 'ds=2016-08-09/country=US'
Управление представлениями#
Trino позволяет читать из материализованных представлений Hive и может быть настроен для поддержки чтения представлений Hive.
Материализованные представления#
Коннектор Hive поддерживает чтение из материализованных представлений Hive. В Trino эти представления представлены как обычные таблицы только для чтения.
Представления Hive#
Представления Hive определяются в HiveQL и хранятся в Hive Metastore Service. Они анализируются, чтобы обеспечить доступ на чтение к данным.
Коннектор Hive включает поддержку чтения представлений Hive в трех разных режимах.
Отключено
Legacy
Experimental
Если требуется использовать представления Hive из Trino, необходимо сравнить результаты в Hive и Trino для каждого определения представления, чтобы убедиться в идентичности результатов. Используйте experimental-режим, когда это возможно. Избегайте legacy-режима. Оставьте поддержку представлений Hive отключенной, если вы не обращаетесь к представлениям Hive из Trino.
Поведение можно настроить в файле свойств каталога.
По умолчанию представления Hive выполняются с режимом безопасности
RUN AS DEFINER. Установите свойство конфигурации каталога
hive.hive-views.run-as-invoker в true, чтобы использовать семантику
RUN AS INVOKER.
Отключено
Поведение по умолчанию — игнорировать представления Hive. Это означает, что бизнес-логика и данные, закодированные в представлениях, недоступны в Trino.
Legacy
Очень простую реализацию для выполнения представлений Hive и, следовательно,
доступа на чтение к данным в Trino, можно включить с помощью
hive.hive-views.enabled=true и
hive.hive-views.legacy-translation=true.
Для временного использования legacy-поведения для конкретного каталога можно
установить свойство сеанса каталога
hive_views_legacy_translation в true.
Это legacy-поведение интерпретирует любой запрос HiveQL, определяющий представление, как если бы он был написан на SQL. Оно не выполняет трансляцию, а полагается на то, что HiveQL очень похож на SQL.
Это работает для очень простых представлений Hive, но может приводить к проблемам для более сложных запросов. Например, если функция HiveQL имеет идентичную сигнатуру, но другое поведение по сравнению с SQL-версией, возвращаемые результаты могут отличаться. В более крайних случаях запросы могут завершаться ошибкой или даже не разбираться и не выполняться.
Experimental
Новое поведение лучше спроектировано и потенциально может стать значительно мощнее legacy-реализации. Оно может анализировать, обрабатывать и переписывать представления Hive, а также содержащиеся в них выражения и операторы.
Оно поддерживает следующие возможности представлений Hive:
UNION [DISTINCT]andUNION ALLagainst Hive viewsNested
GROUP BYclausescurrent_user()LATERAL VIEW OUTER EXPLODELATERAL VIEW [OUTER] EXPLODEдля array of structLATERAL VIEW json_tuple
Экспериментальное поведение можно включить с помощью
hive.hive-views.enabled=true. Удалите свойство
hive.hive-views.legacy-translation или установите его в false, чтобы
убедиться, что legacy-режим не включен.
Имейте в виду, что при экспериментировании с этой возможностью многие функции еще не реализованы. Ниже приведен неполный список отсутствующей функциональности:
HiveQL
current_date,current_timestampи другиеВызовы функций Hive, включая
translate(), оконные функции и другиеCommon table expressions и простые case-выражения
Учет настройки точности timestamp
Поддержка всех типов данных Hive и корректное сопоставление с типами Trino
Возможность обрабатывать пользовательские UDF
Производительность#
Коннектор включает ряд улучшений производительности, подробно описанных в следующих разделах.
Статистика таблиц#
Коннектор Hive поддерживает сбор и управление статистикой таблиц для повышения производительности обработки запросов.
При записи данных коннектор Hive всегда собирает базовую статистику
(numFiles, numRows, rawDataSize, totalSize) и по умолчанию также
собирает статистику на уровне столбцов:
Тип столбца |
Собираемая статистика |
|---|---|
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений, min/max значения |
|
Количество null, количество различных значений |
|
Количество null, количество различных значений |
|
Количество null |
|
Количество null, количество значений true/false |
Обновление статистики таблиц и партиций#
Если ваши запросы сложны и включают соединение больших наборов данных, выполнение ANALYZE для таблиц/партиций может повысить производительность запросов за счет сбора статистической информации о данных.
При анализе партиционированной таблицы партиции для анализа можно указать с
помощью необязательного свойства partitions, которое является массивом,
содержащим значения ключей партиций в порядке их объявления в схеме таблицы:
ANALYZE table_name WITH (
partitions = ARRAY[
ARRAY['p1_value1', 'p1_value2'],
ARRAY['p2_value1', 'p2_value2']])
Этот запрос соберет статистику для двух партиций с ключами
p1_value1, p1_value2 и p2_value1, p2_value2.
Для широких таблиц сбор статистики по всем столбцам может быть дорогим и
негативно влиять на планирование запросов. Обычно это также не требуется:
статистика полезна только для конкретных столбцов, например ключей join,
предикатов и ключей группировки. Подмножество столбцов для анализа можно
указать с помощью необязательного свойства columns:
ANALYZE table_name WITH (
partitions = ARRAY[ARRAY['p2_value1', 'p2_value2']],
columns = ARRAY['col_1', 'col_2'])
Этот запрос собирает статистику для столбцов col_1 и col_2 для партиции с
ключами p2_value1, p2_value2.
Обратите внимание, что если статистика ранее была собрана для всех столбцов, ее необходимо удалить перед повторным анализом только подмножества:
CALL system.drop_stats('schema_name', 'table_name')
Также можно удалить статистику только для выбранных партиций:
CALL system.drop_stats(
schema_name => 'schema',
table_name => 'table',
partition_values => ARRAY[ARRAY['p2_value1', 'p2_value2']])
Динамическая фильтрация#
Коннектор Hive поддерживает оптимизацию динамической фильтрации. Dynamic partition pruning поддерживается для партиционированных таблиц, хранящихся в любом формате файлов, как для broadcast, так и для partitioned joins. Dynamic bucket pruning поддерживается для bucketed-таблиц, хранящихся в любом формате файлов, только для broadcast joins.
Для таблиц, хранящихся в формате ORC или Parquet, динамические фильтры также проталкиваются в локальное сканирование таблиц на worker-узлах для broadcast joins. Предикаты динамических фильтров, проталкиваемые в ORC и Parquet readers, используются для stripe или row-group pruning и экономии дискового I/O. Сортировка данных внутри файлов ORC или Parquet по столбцам, используемым в критериях join, значительно повышает эффективность stripe или row-group pruning. Это связано с тем, что группировка похожих данных в одном stripe или row-group значительно повышает селективность min/max индексов, поддерживаемых на уровне stripe или row-group.
Отложенное выполнение для динамических фильтров#
Часто полезно дождаться сбора динамических фильтров перед запуском сканирования таблицы. Это дополнительное ожидание потенциально может дать значительную общую экономию времени запроса и CPU, если динамическая фильтрация способна уменьшить объем сканируемых данных.
Для коннектора Hive сканирование таблицы можно отложить на настроенное время до
сбора динамических фильтров с помощью свойства конфигурации
hive.dynamic-filtering.wait-timeout в файле каталога или свойства сеанса
каталога <hive-catalog>.dynamic_filtering_wait_timeout.
Перенаправление таблиц#
Trino позволяет прозрачно перенаправлять операции над существующей таблицей в подходящий каталог на основе формата таблицы и конфигурации каталога.
В контексте коннекторов, зависящих от службы metastore, например Коннектор Hive, Коннектор Iceberg и Коннектор Delta Lake, metastore (служба Hive metastore, AWS Glue Data Catalog) может использоваться для работы с таблицами разных форматов. Поэтому база данных metastore может содержать разные таблицы с разными форматами.
В качестве конкретного примера используем следующий простой сценарий, в котором задействовано перенаправление таблицы:
USE example.example_schema;
EXPLAIN SELECT * FROM example_table;
Query Plan
-------------------------------------------------------------------------
Fragment 0 [SOURCE]
...
Output[columnNames = [...]]
│ ...
└─ TableScan[table = another_catalog:example_schema:example_table]
...
Вывод оператора EXPLAIN указывает фактический каталог, который обрабатывает
запрос SELECT к таблице example_table.
Функциональность перенаправления таблиц также работает при использовании полностью квалифицированных имен таблиц:
EXPLAIN SELECT * FROM example.example_schema.example_table;
Query Plan
-------------------------------------------------------------------------
Fragment 0 [SOURCE]
...
Output[columnNames = [...]]
│ ...
└─ TableScan[table = another_catalog:example_schema:example_table]
...
Trino поддерживает перенаправление таблиц для следующих операций:
Операции чтения таблиц
Операции записи в таблицы
Операции управления таблицами
Trino не поддерживает перенаправление представлений.
Коннектор поддерживает перенаправление из таблиц Hive в таблицы Iceberg, Delta Lake и Hudi с помощью следующих свойств конфигурации каталога:
hive.iceberg-catalog-name: имя каталога, настроенного с Коннектор Iceberg, используемого для чтения таблиц Iceberg.hive.delta-lake-catalog-name: имя каталога, настроенного с Коннектор Delta Lake, используемого для чтения таблиц Delta Lake.hive.hudi-catalog-name: имя каталога, настроенного с Hudi connector, используемого для чтения таблиц Hudi.
Кеш файловой системы#
Коннектор поддерживает настройку и использование кеширования файловой системы.
Свойства конфигурации настройки производительности#
В следующей таблице описаны свойства настройки производительности коннектора Hive.
Warning
Свойства конфигурации настройки производительности считаются возможностями экспертного уровня. Изменение этих свойств относительно значений по умолчанию, вероятно, приведет к нестабильности и снижению производительности.
Имя свойства |
Описание |
Значение по умолчанию |
|---|---|---|
|
Целевое количество буферизованных splits для каждого сканирования таблицы в запросе, после которого планировщик пытается сделать паузу. |
|
|
Максимально допустимый размер буферизованных splits для каждого сканирования таблицы в запросе, после которого запрос завершается ошибкой. |
|
|
Максимальное количество splits, генерируемых в секунду на одно сканирование таблицы. Это можно использовать для снижения нагрузки на систему хранения. По умолчанию ограничения нет, что приводит к максимальной параллелизации доступа к данным в Trino. |
|
|
Для каждого сканирования таблицы координатор сначала назначает участки
файлов размером до |
|
|
Размер одного участка файла, назначаемого worker до назначения
|
|
|
Наибольший размер одного участка файла, назначаемого worker. Меньшие splits дают больше параллелизма и тем самым могут уменьшить задержку, но также имеют больше накладных расходов и увеличивают нагрузку на систему. |
|
Ограничения, связанные с Hive 3#
По соображениям безопасности системный каталог
sysнедоступен.Тип данных Hive
timestamp with local zoneсопоставляется сtimestamp with time zoneс часовым поясом UTC. Поддерживается только чтение значений; запись в таблицы со столбцами этого типа не поддерживается.Из-за проблем Hive HIVE-21002 и HIVE-22167 Trino некорректно читает значения
TIMESTAMPиз форматов файлов Parquet, RCBinary или Avro, созданных Hive 3.1 или более поздней версии. При чтении из этих форматов файлов Trino возвращает результаты, отличающиеся от Hive.Trino не поддерживает сбор статистики таблиц для транзакционных таблиц Hive. После создания таблицы необходимо использовать Hive для сбора статистики таблицы с помощью оператора ANALYZE.