示例 HTTP 连接器

示例 HTTP 连接器有一个简单的目标:它通过 HTTP 读取逗号分隔的数据。例如,如果您在 CSV 格式中拥有大量数据,您可以将示例 HTTP 连接器指向这些数据并编写 SQL 查询来处理它。

代码

示例 HTTP 连接器可以在 Presto 源代码树根目录的 presto-example-http 目录中找到。

插件实现

示例 HTTP 连接器中的插件实现与其他插件实现非常相似。大部分实现都用于处理可选配置,唯一感兴趣的功能如下:

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

请注意,ImmutableList 类是来自 Guava 的一个实用程序类。

与所有连接器一样,此插件覆盖了 getConnectorFactories() 方法,并返回一个 ExampleConnectorFactory

连接器工厂实现

在 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);

连接器:示例连接器

此类允许 Presto 获取对连接器提供的各种服务的引用。

元数据:示例元数据

此类负责报告表名、表元数据、列名、列元数据以及有关此连接器提供的架构的其他信息。Presto 还调用 ConnectorMetadata 来确保特定连接器可以理解和处理给定的表名。

ExampleMetadata 实现将许多这些调用委托给 ExampleClient,该类实现了连接器的大部分核心功能。

拆分管理器:示例拆分管理器

拆分管理器将表的 데이터를 Presto가 처리를 위해 워커에 배포할 개별 청크로 분할합니다. 예를 들어, Example HTTP 커넥터의 경우 각 테이블에는 실제 데이터를 가리키는 하나 이상의 URI가 포함됩니다. URI당 하나의 스플릿이 만들어집니다.

记录集提供者:示例记录集提供者

记录集提供者创建一个记录集,该记录集又创建一个记录游标,该游标将实际数据返回给 Presto。ExampleRecordCursor 通过 HTTP 从 URI 读取数据。每行对应一行。行在逗号上分割成单个字段值,然后这些值被返回给 Presto。