示例 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。