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に返されます。