Поддержка INSERT и CREATE TABLE AS#

Чтобы поддерживать INSERT, коннектор должен реализовать:

  • beginInsert() and finishInsert() from the ConnectorMetadata interface;

  • a ConnectorPageSinkProvider that receives a table handle and returns a ConnectorPageSink.

При выполнении оператора INSERT движок вызывает в коннекторе метод beginInsert(), который получает table handle и список столбцов. Он должен вернуть ConnectorInsertTableHandle, который может нести любую информацию, специфичную для коннектора, и передается в page sink provider. PageSinkProvider создает page sink, который принимает объекты Page.

Когда все страницы для конкретного split обработаны, Trino вызывает ConnectorPageSink.finish(), который возвращает Collection<Slice> фрагментов, представляющих специфичную для коннектора информацию об обработанных строках.

Когда все страницы для всех split обработаны, Trino вызывает ConnectorMetadata.finishInsert(), передавая коллекцию, содержащую все фрагменты из всех split. Коннектор выполняет необходимые действия для завершения операции, например фиксирует транзакцию.

Чтобы поддерживать CREATE TABLE AS, ConnectorPageSinkProvider также должен возвращать page sink при получении ConnectorOutputTableHandle. Этот handle возвращается из ConnectorMetadata.beginCreateTable().