예제 HTTP 커넥터

예제 HTTP 커넥터

예제 HTTP 커넥터는 단순한 목표를 가져요. HTTP로 쉼표로 구분된 데이터를 읽어요. 예를 들어 CSV 형식의 데이터가 많다면, 예제 HTTP 커넥터를 그 데이터에 연결하고 쿼리를 작성해 처리할 수 있어요.

출처: 문서

본문

설치 (Installation)

예제 HTTP 커넥터 플러그인은 선택 사항이라 기본 tarball과 기본 Docker 이미지에 포함되지 않아요. 플러그인 설치 지침을 따르고, 선택적으로 trino-packages 프로젝트를 쓰거나 플러그인 아카이브 trino-example-http-483.zip을 직접 다운로드해요.

코드 (Code)

예제 HTTP 커넥터는 Trino 소스 트리의 trino-example-http 디렉터리에서 찾을 수 있어요.

플러그인 구현 (Plugin implementation)

예제 HTTP 커넥터의 플러그인 구현은 다른 플러그인 구현과 매우 비슷해요. 구현의 대부분은 선택적 설정 처리에 쓰이고, 관심 있는 유일한 함수는 다음과 같아요.

@Override
public Iterable<ConnectorFactory> getConnectorFactories()
{
    return ImmutableList.of(new ExampleConnectorFactory());
}

ImmutableList 클래스는 Guava의 유틸리티 클래스라는 점에 유의하세요. 모든 커넥터처럼 이 플러그인도 getConnectorFactories() 메서드를 오버라이드하고 ExampleConnectorFactory를 반환해요.

ConnectorFactory 구현 (ConnectorFactory implementation)

Trino에서 Trino와 특정 유형의 데이터 소스 사이의 연결을 처리하는 기본 객체는 Connector 객체이며, 이는 ConnectorFactory로 만들어져요.

이 구현은 ExampleConnectorFactory 클래스에서 사용할 수 있어요. 커넥터 팩토리 구현이 가장 먼저 하는 일은 이 커넥터의 이름을 지정하는 거예요. 이는 Trino 설정에서 이 커넥터를 참조하는 데 사용하는 문자열과 같아요.

@Override
public String getName()
{
    return "example_http";
}

커넥터 팩토리의 실제 작업은 create() 메서드에서 일어나요. ExampleConnectorFactory 클래스에서 create() 메서드는 커넥터를 설정한 뒤 Guice에 객체 생성을 요청해요. 파라미터 검증과 예외 처리를 제외한 create() 메서드의 핵심은 다음과 같아요.

// A plugin is not required to use Guice; it is just very convenient
Bootstrap app = new Bootstrap(
        new JsonModule(),
        new ExampleModule(catalogName));

Injector injector = app
        .doNotInitializeLogging()
        .setRequiredConfigurationProperties(requiredConfig)
        .initialize();

return injector.getInstance(ExampleConnector.class);

커넥터: ExampleConnector

이 클래스는 커넥터가 제공하는 다양한 서비스에 대한 참조를 Trino가 얻을 수 있게 해줘요.

메타데이터: ExampleMetadata

이 클래스는 이 커넥터가 제공하는 스키마에 대한 테이블 이름, 테이블 메타데이터, 컬럼 이름, 컬럼 메타데이터 및 기타 정보를 보고하는 책임을 가져요. Trino는 또한 특정 커넥터가 주어진 테이블 이름을 이해·처리할 수 있는지 확인하기 위해 ConnectorMetadata를 호출해요.

ExampleMetadata 구현은 이 호출 중 많은 부분을 커넥터의 핵심 기능을 구현하는 클래스인 ExampleClient에 위임해요.

스플릿 매니저: ExampleSplitManager

스플릿 매니저는 테이블의 데이터를 Trino가 워커에 분배해 처리할 개별 청크로 나눠요. 예제 HTTP 커넥터의 경우 각 테이블에는 실제 데이터를 가리키는 URI가 하나 이상 들어 있어요. URI마다 스플릿 하나가 생성돼요.

레코드 셋 프로바이더: ExampleRecordSetProvider

레코드 셋 프로바이더는 레코드 셋을 만들고, 이는 다시 Trino에 실제 데이터를 반환하는 레코드 커서를 만들어요. ExampleRecordCursor는 HTTP로 URI에서 데이터를 읽어요. 각 줄이 하나의 행에 해당해요. 줄은 쉼표로 개별 필드 값으로 분리된 뒤 Trino에 반환돼요.

더 알아보기 (Learn more)

예제 HTTP 커넥터는 커넥터 SPI 구현의 좋은 출발점이에요. 커넥터 개발 전반은 커넥터 개발 문서에서 볼 수 있어요.