Example HTTP コネクター

Example HTTP コネクターの簡単な目標は、HTTP経由でコンマ区切りのデータを読み取ることです。例えば、CSV形式で大量のデータがある場合、このExample HTTPコネクターをそのデータに向けて、SQLクエリを書いて処理できます。

コード

Example HTTP コネクターは、Prestoソースツリーのルートにある presto-example-http ディレクトリにあります。

プラグインの実装

Example HTTP コネクターのプラグインの実装は、他のプラグインの実装と非常によく似ています。実装の大部分はオプションの設定の処理に費やされており、興味深い唯一の関数は次のとおりです。

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

ImmutableList クラスは Guava のユーティリティクラスであることに注意してください。

すべてのコネクターと同様に、このプラグインは getConnectorFactories() メソッドをオーバーライドし、ExampleConnectorFactory を返します。

ConnectorFactory の実装

Prestoでは、Prestoと特定のタイプのデータソース間の接続を処理する主要なオブジェクトは、Connector オブジェクトであり、これは ConnectorFactory を使用して作成されます。

この実装は ExampleConnectorFactory クラスで利用できます。コネクターファクトリー実装の最初に行うことは、このコネクターの名前を指定することです。これは、Prestoの設定でこのコネクターを参照するために使用されるのと同じ文字列です。

@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

このクラスにより、Prestoはコネクターによって提供されるさまざまなサービスへの参照を取得できます。

メタデータ: ExampleMetadata

このクラスは、テーブル名、テーブルメタデータ、列名、列メタデータ、およびこのコネクターによって提供されるスキーマに関するその他の情報を報告する役割を担います。ConnectorMetadata は、特定のコネクターが特定のテーブル名を理解して処理できることを確認するためにも Presto によって呼び出されます。

ExampleMetadata の実装は、これらの呼び出しの多くをコネクターのコア機能の多くを実装するクラスである ExampleClient に委譲します。

スプリットマネージャー: ExampleSplitManager

スプリットマネージャーは、テーブルのデータを、Prestoが処理のためにワーカーに分散する個々のチャンクに分割します。Example HTTP コネクターの場合、各テーブルには実際のデータを示す 1 つ以上の URI が含まれています。URIごとに1つのスプリットが作成されます。

レコードセットプロバイダー: ExampleRecordSetProvider

レコードセットプロバイダーは、Prestoに実際のデータを返すレコードカーソルを作成するレコードセットを作成します。ExampleRecordCursor は、HTTP経由でURIからデータを読み取ります。各行は単一の行に対応します。行はコンマで個々のフィールド値に分割され、その後Prestoに返されます。