Каталог Hive в Trino
Сервис Trino поставляется с преднастроенным каталогом для работы с Hive. Данный каталог использует коннектор Hive и "из коробки" готов к работе с сервисом Hive, развернутым в ADH-кластере.
Параметры конфигурации встроенного Hive-каталога генерируются автоматически и обеспечивают доступ к Hive Metastore, а также к HDFS-директориям сервиса Hive.
Имя встроенного каталога Hive — hive-adh
.
ADH формирует каталог автоматически и генерирует файл hive-adh.properties в директории /etc/trino/conf/catalog/, если:
-
В ADH-кластере установлен сервис Hive. Если сервис Hive был установлен после Trino, сервис Trino необходимо перезапустить.
-
Конфигурация Hive-каталога активна.
Активация каталога Hive
По умолчанию встроенный каталог Hive отключен в сервисе Trino. Для активации каталога используйте ADCM. Для этого включите опцию Hive configuration сервиса Trino (Clusters → <clusterName> → Services → Trino → Configuration), а затем перезапустите сервис.
После активации следует проверить доступность встроенного каталога Hive. Для этого подключитесь к Trino Coordinator (используя Trino CLI или SQL-клиент, например, DBeaver) и выполните команду:
SHOW CATALOGS;
В списке появится встроенный каталог Hive:
Catalog | --------+ hive-adh| system |
РЕКОМЕНДАЦИЯ
Актуальная JDBC-строка для подключения к сервису Trino доступна на странице конфигурации сервиса в ADCM (Clusters → <clusterName> → Services → Trino → Info).
|
Поддерживаемые форматы Hive
Hive-каталог сервиса Trino поддерживает следующие форматы таблиц Hive:
-
ORC
-
Parquet
-
Avro
Также поддерживаются следующие SerDe-форматы:
-
TextFile
-
CSV с использованием
org.apache.hadoop.hive.serde2.OpenCSVSerde
-
JSON с использованием
org.apache.hive.hcatalog.data.JsonSerDe
-
RCFile с использованием
ColumnarSerDe
-
RCFile с использованием
LazyBinaryColumnarSerDe
-
SequenceFile
Параметры конфигурации Hive-каталога
Hive-каталог сервиса Trino поддерживает множество параметров конфигурации для тонкой настройки взаимодействия с файлами Hive. Актуальный список параметров доступен в документации Trino. Используя ADCM, можно установить новые или переопределить дефолтные параметры. Для этого используйте раздел настроек Custom Hive configuration в ADCM (Clusters → <clusterName> → Services → Trino → Configuration).
Поддержка SQL
ВАЖНО
Чтобы Trino мог записывать данные в таблицы Hive, при подключении к Trino (например, через Trino CLI или DBeaver) необходимо указывать имя пользователя, соответствующее Unix-пользователю на хосте ADH, у которого имеются достаточные права для записи в HDFS-директории хранилища Hive. В противном случае вы можете наблюдать следующую ошибку: Failed to create external path hdfs://adh/apps/hive/warehouse/trino_demo_schema1.db for database trino_demo_schema1. This may result in access not being allowed if the StorageBasedAuthorizationProvider is enabled: null |
Управление схемой
Схемы Trino используются для группировки нескольких таблиц/представлений и эквивалентны базам данных в Hive. Ниже показаны базовые команды для работы со схемами:
CREATE SCHEMA "hive-adh"."trino_demo_schema_hive"; (1)
USE "hive-adh"."trino_demo_schema_hive"; (2)
SHOW SCHEMAS;
DROP "hive-adh"."trino_demo_schema_hive"; (3)
1 | Создание новой схемы Trino (базы данных Hive).
hive-adh — имя встроенного каталога Hive.
Обратите внимание на двойные кавычки, используемые для обрамления идентификаторов. |
2 | Выбор схемы для сессии. Все последующие SQL-команды Trino будет выполнять в указанной базе данных Hive в рамках текущей сессии. |
3 | Удаление схемы, в которой имеются таблицы, запрещено. Чтобы удалить схему, необходимо сначала удалить все вложенные таблицы. |
Для выполнения запросов к произвольным таблицам, которые принадлежат разным схемам, можно указать каталог, схему и имя таблицы в SQL-запросе, например:
SELECT * FROM "hive-adh"."trino_demo_schema_hive"."transactions" txns_hive
JOIN "iceberg-adh"."trino_demo_schema_iceberg"."transactions" txns_icb
ON txns_hive.txn_id = txns_icb.txn_id;
РЕКОМЕНДАЦИЯ
Используя Trino UI, можно просматривать и анализировать SQL-запросы, отправленные в Trino.
|
Примеры DDL
Trino поддерживает большинство DDL-операций Hive для управления сущностями, такими как таблицы, базы данных, процедуры и так далее.
Trino также поддерживает набор конфигурационных свойств для таблиц Hive, которые позволяют задавать метаданные для таблиц.
Эти свойства можно назначить таблице Hive, используя предложение WITH
, как показано далее в примерах.
Ниже представлены примеры базовых DDL-команд с использованием каталога Hive.
CREATE TABLE "hive-adh"."trino_demo_schema_hive"."transactions" (id BIGINT, value VARCHAR); (1)
CREATE TABLE "hive-adh"."trino_demo_schema_hive"."transactions_with" (id BIGINT, value VARCHAR) (2)
WITH (
format = 'ORC',
transactional=true
);
CREATE TABLE "hive-adh"."trino_demo_schema_hive"."transactions_pttnd" ( (3)
txn_id BIGINT,
txn_amount DOUBLE,
acc_id BIGINT
) WITH (
partitioned_by=ARRAY['acc_id']
);
CREATE TABLE "hive-adh"."trino_demo_schema_hive"."transactions_bckttd" ( (4)
txn_id BIGINT,
txn_amount DOUBLE,
acc_id BIGINT
) WITH (
bucketed_by=ARRAY['acc_id'],
bucket_count=20
);
CREATE TABLE "hive-adh"."trino_demo_schema_hive"."transactions_ext" (
id BIGINT,
payload VARCHAR,
request_time TIMESTAMP
) WITH (
format = 'TEXTFILE',
external_location = 'hdfs://adh/apps/hive/ext/test_ext_table' (5)
);
SET SESSION "hive-adh".non_transactional_optimize_enabled=true; (6)
ALTER TABLE "hive-adh"."trino_demo_schema_hive"."transactions_pttnd"
EXECUTE optimize (file_size_threshold => '128MB'); (7)
ANALYZE "hive-adh"."trino_demo_schema_hive"."transactions_pttnd"; (8)
CALL system.create_empty_partition( (9)
schema_name => "hive-adh",
table_name => "trino_demo_schema_hive",
partition_columns => ARRAY['acc_id'],
partition_values => ARRAY['1005']
);
1 | Создание базовой таблицы Hive.
Обратите внимание, что Trino использует ANSI SQL, в то время как Hive использует HiveQL, который имеет некоторые отличия, включая разницу в типах данных.
Например, при выполнении этого запроса тип данных VARCHAR будет приведен к типу данных Hive STRING . |
2 | Создание транзакционной таблицы в формате ORC.
Для создания транзакционных таблиц через Trino необходимо использовать формат ORC.
Если формат таблицы не указан явно, Trino создаст нетранзакционную таблицу, используя формат, указанный в конфигурационном свойстве каталога hive.storage-format . |
3 | Создание партиционированной таблицы Hive.
Обратите внимание на синтаксис ARRAY['col1', 'col2'] для указания партиций. |
4 | Создание таблицы с определенным количеством бакетов. |
5 | Создание external-таблицы с указанием кастомной директории в HDFS. |
6 | Установка свойства сессии (session property).
В данном примере установка non_transactional_optimize_enabled=true необходима для выполнения команды OPTIMIZE . |
7 | Запуск команды OPTIMIZE , которая переписывает содержимое таблицы, объединяя множество мелких файлов в файлы большего размера. |
8 | Сбор статистики таблицы. Trino не поддерживает сбор статистики для транзакционных таблиц Hive. |
9 | Вызов системной процедуры для создания пустой партиции. Эта команда создает пустую директорию в хранилище HDFS, например, /apps/hive/warehouse/trino_demo_schema.db/transactions_pttnd/acc=1005. Больше подробной информации о процедурах, поддерживаемых каталогом Hive, можно найти в документации Trino. |
Примеры DML
Trino поддерживает большинство DML-операций Hive, например INSERT
, UPDATE
, DELETE
, MERGE
и так далее.
Фактическое поведение этих команд зависит от формата таблиц и используемого хранилища метаданных (Metastore).
Ниже приведены некоторые ограничения и особенности выполнения CRUD-операций над таблицами Hive с помощью Trino:
-
Операции
UPDATE
поддерживаются только для транзакционных таблиц. Необходимо, чтобы целевая таблица была транзакционной, ACID и имела формат ORC. -
Команда
DELETE
, применяемая к нетранзакционным таблицам, поддерживается только в случае, если таблица разбита на партиции, а фильтр предложенияWHERE
строго соответствует партиции. Для транзакционных таблиц Hive в формате ORC поддерживается построчное удаление, а предложениеWHERE
может быть произвольным. -
Операция
MERGE
поддерживается только для ACID-таблиц. -
Создание ACID-таблиц с помощью Hive Streaming Ingest не поддерживается.
-
Сбор статистики с помощью
ANALYZE
не поддерживается для транзакционных таблиц Hive. -
Операция
TRUNCATE
не поддерживается каталогом Hive.
Больше подробной информации о лучших практиках и ограничениях работы с каталогом Hive доступно в документации Trino. Ниже представлены примеры DML-операций c использованием Trino-каталога Hive.
INSERT INTO "hive-adh"."trino_demo_schema_hive"."transactions_pttnd"
VALUES (1, 15, 1001),
(2, 100, 1002),
(3, 75, 1001);
SELECT * FROM "hive-adh"."trino_demo_schema_hive"."transactions_pttnd"; (1)
SELECT * FROM "hive-adh"."trino_demo_schema_hive"."transactions_pttnd$properties"; (2)
SELECT * FROM "hive-adh"."trino_demo_schema_hive"."transactions_pttnd$partitions"; (3)
SELECT *, "$path", "$file_size", "$partition" FROM "hive-adh"."trino_demo_schema_hive"."transactions_pttnd"; (4)
SELECT *, "$path", "$file_size" FROM "hive-adh"."trino_demo_schema_hive"."transactions_pttnd"
WHERE "$partition" = 'acc_id=1001'; (5)
SELECT * FROM "hive-adh"."trino_demo_schema_hive"."transactions" txns_hv (6)
JOIN "iceberg-adh"."trino_demo_schema_iceberg"."transactions" txns_icb
ON txns_hv.txn_id = txns_icb.txn_id; (6)
DELETE FROM "hive-adh"."trino_demo_schema_hive"."transactions_pttnd" (7)
WHERE txn_id = 2;
1 | ANSI SELECT для выборки из базы данных Hive. |
2 | Получение метаданных из скрытой таблицы $properties . |
3 | Получение списка всех доступных партиций в партиционированной таблице. |
4 | Получение метаданных из таблицы метаданных для столбцов. |
5 | Получение информации о файлах таблицы и размере файлов для всех записей, принадлежащих определенной партиции (acc_id=1001 ). |
6 | Получение данных из двух каталогов Trino: Hive-каталога hive-adh и Iceberg-каталога iceberg-adh .
Получив результаты выборки из каждого каталога, Trino применяет операцию JOIN и возвращает клиенту конечный набор результатов.
Чтобы данный запрос работал корректно, оба каталога должны быть включены в сервисе Trino. |
7 | Удаление строки. Целевая таблица должна быть транзакционной, иначе Trino выдаст ошибку. |
Больше информации о DML-командах, поддерживаемых Trino коннектором для Hive, можно найти в документации Trino.
Оптимизация производительности
Trino по умолчанию использует некоторые методы оптимизаций для ускорения работы с таблицами Hive. К ним относятся:
-
Сбор статистики таблицы. Коннектор Hive использует статистику таблиц (для транзакционных таблиц) для повышения производительности обработки запросов.
-
Динамическая фильтрация. Обеспечивает прирост скорости выполнения запросов с выборочными операциями
JOIN
. Позволяет избежать чтения "ненужных" данных, которые отфильтровываются условиемJOIN
. -
Кеширование файловой системы. Кеширует фрагменты данных, которые часто считываются из HDFS и к которым обращаются Trino Workers при выполнении cхожих запросов.
-
Перенаправление таблиц. Метод, позволяющий перенаправлять CRUD-операции в другой каталог.