Обзор коннекторов в Trino
Обзор
Коннекторы в Trino — это Java-плагины, которые позволяют Trino взаимодействовать с различными источниками данных, такими как озера данных Hadoop, хранилища Hive, таблицы Apache Iceberg, базы данных PostgreSQL и многие другие. Trino получает доступ к источнику данных с помощью коннектора, который настраивается в каталоге. Коннекторы отвечают за коммуникацию между Trino и целевым источником данных, а также транслируют ANSI SQL-команды Trino в команды, соответствующие целевому источнику данных. Один коннектор можно использовать для доступа к одному или нескольким источникам данных одного типа.
Роль коннекторов во взаимодействии с Trino представлена на следующей высокоуровневой схеме.
Поддерживаемые коннекторы
Полный список коннекторов, поддерживаемых Trino, доступен в документации Trino.
Настройка коннекторов
Коннекторы Trino настраиваются с помощью конфигурационных файлов каталога.
Коннектор, который должен использоваться для доступа к источнику данных каталога, указывается в конфигурационном файле <catalog_name>.properties с помощью свойства connector.name
.
Например:
connector.name=hive
...
ПРИМЕЧАНИЕ
Один и тот же коннектор можно использовать для работы с несколькими каталогами.
Например, если у вас есть два хранилища Hive с отдельными базами данных под Metastore, вы можете настроить два отдельных каталога, которые используют один и тот же коннектор Hive (connector.name=hive ), но содержат разные параметры соединения для каждого каталога.
|
Конфигурационные файлы каталогов могут также содержать дополнительные параметры, специфичные для конкретного типа коннекторов, для тонкой настройки взаимодействия с источником данных. Например:
hive.metastore.thrift.impersonation.enabled=True
iceberg.catalog.type=hive_metastore
iceberg.compression-codec=SNAPPY
iceberg.file-format=PARQUET
...
Более подробную информацию о конфигурационных свойствах каждого коннектора можно найти в соответствующем разделе документации Trino.
Создание пользовательского коннектора
Помимо списка коннекторов, поддерживаемых ADH-сервисом Trino "из коробки", вы можете создавать собственные коннекторы для работы с любым источником данных. Даже если источник данных не использует такие сущности, как таблицы, столбцы, строки, партиции и прочие, адаптировав источник данных к Trino API с помощью коннектора, вы сможете писать запросы на SQL и получать результаты из этого источника данных.
С технической точки зрения новые коннекторы Trino добавляются в виде плагинов. Коннектор должен реализовывать service provider interface (SPI), который позволяет Trino взаимодействовать с источником данных. В каждом коннекторе должен быть реализован следующий функционал API:
-
Операции получения метаданных о таблицах, представлениях и схемах.
-
Операции по созданию логических единиц партиционирования данных, позволяющие Trino распараллеливать операции чтения и записи.
-
Генераторы и ресиверы данных, которые преобразуют исходные данные в in-memory объекты, обрабатываемые движком Trino.
Реализовав SPI для коннектора Trino, можно использовать стандартные операции Trino для подключения к любому источнику данных и выполнения операций над любым источником данных. Реализация конкретного коннектора должна учитывать все детали, связанные с особенностями источника данных, с которым взаимодействует коннектор.
Например, базовый Trino-коннектор, поддерживающий чтение данных из источника данных, должен реализовать определенный набор методов, включая listTables()
.
Движок Trino вызывает этот метод для всех коннекторов, чтобы получить список доступных таблиц в схеме/базе данных.
Движок Trino не располагает информацией, как именно каждый конкретный коннектор получает список таблиц.
Некоторые коннекторы могут получить список из информационной схемы, другие могут запросить информацию из хранилища метаданных, а некоторые получают список через API источника данных.
Вся логика получения списка таблиц для конкретного источника данных реализуется только в коннекторе.
Подробности и примеры создания пользовательских коннекторов доступны в следующих разделах документации Trino:
Также вы можете использовать исходный код существующих коннекторов Trino в GitHub.