Connectors SPI

Инстанс коннектор создается в ConnectorFactory когда Trino вызывает метод getConnectorFactory() для нашего плагина. ConnectorFactory это просто интерфейс отвечающий за предоставление имени коннектора и его экземпляра.

Простейший коннектор поддерживающий только чтение но не запись в источнике должен вернуть экземпляры следующих сервисов:

  • ConnectorMetadata
  • ConnectorSplitManager
  • И один из двух:
    • ConnectorRecordSetProvider
    • ConnectorPageSourceProvider

Конфигурация

Метод create() класса ConnectorFactory получает мапу конфигурации:

Connector create(String catalogName,
 Map<String,String> config,
 ConnectorContext context)

проблема в том, что все значения будут строками, а значит потребуют валидации и преобразования в нужные типы. Чтобы избежать этих сложностей (и огрести новые) авторы 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