Connectors SPI
Инстанс коннектор создается в ConnectorFactory
когда Trino вызывает метод getConnectorFactory()
для нашего плагина. ConnectorFactory
это просто интерфейс отвечающий за предоставление имени коннектора и его экземпляра.
Простейший коннектор поддерживающий только чтение но не запись в источнике должен вернуть экземпляры следующих сервисов:
- ConnectorMetadata
- ConnectorSplitManager
- И один из двух:
- ConnectorRecordSetProvider
- ConnectorPageSourceProvider
Конфигурация
Метод create()
класса ConnectorFactory
получает мапу конфигурации:
проблема в том, что все значения будут строками, а значит потребуют валидации и преобразования в нужные типы. Чтобы избежать этих сложностей (и огрести новые) авторы Trino советуют создать отдельный: child:: Configuration class
ConnectorMetadata
Этот интерфейс позволяет Trino получать списки схем, таблиц, и другие метаданные о конкретном источнике данных. Простейший коннектор (read-only) должен реализовывать следующие методы:
listSchemaNames
listTables
streamTableColumns
getTableHandle
getTableMetadata
getColumnHandles
getColumnMetadata
Очевидно, что если источник поддерживает схемы, таблицы и колонки то реализация этого интерфейса довольно очевидна. Если же нет придётся изобретать.
Дополнительно интерфейс позволяет реализовать следующие возможности:
- Schema management, which is creating, altering and dropping schemas, tables, table columns, views, and materialized views.
- Support for table and column comments, and properties.
- Schema, table and view authorization.
- Executing Table functions.
- Providing table statistics used by the Cost Based Optimizer (CBO) and collecting statistics during writes and when analyzing selected tables.
- Data modification, which is:
- inserting, updating, and deleting rows in tables,
- refreshing materialized views,
- truncating whole tables,
- and creating tables from query results.
- Role and grant management.
- Pushing down:
- Limit and Top N - limit with sort items
- Predicates
- Projections
- Sampling
- Aggregations
- Joins
- Table function invocation