连接器

连接器是 Presto 中所有查询数据的来源。即使您的数据源没有底层表支持它,只要您将数据源改编为 Presto 预期的 API,您就可以针对此数据编写查询。

连接器拆分

您的连接器拆分的实例。

The getNodeSelectionStrategy 方法指示 Split 的节点亲和性,它有三种选项

HARD_AFFINITY: 拆分不可远程访问,必须在特定节点上

SOFT_AFFINITY: 连接器拆分提供引擎可从中选择的首选节点列表,但不是强制性的。

NO_PREFERENCE: 拆分可远程访问,可以在任何节点上

The getPreferredNodes 方法为调度程序提供首选节点列表。

如果策略是 HARD_AFFINITY,调度程序将尊重首选项。否则,如果策略是 SOFT_AFFINITY,调度程序将优先考虑提供的节点。但是,如果提供的节点很忙,调度程序没有保证会选择它们。空列表表示没有偏好。

连接器工厂

您的连接器实例是由 ConnectorFactory 实例创建的,该实例是在 Presto 调用插件上的 getConnectorFactory() 时创建的。连接器工厂是一个简单的接口,负责创建 Connector 对象的实例,该对象返回以下服务的实例

  • 连接器元数据

  • 连接器拆分管理器

  • 连接器句柄解析器

  • 连接器记录集提供者

连接器元数据

连接器元数据接口有许多重要的方法,这些方法负责允许 Presto 查看模式列表、表列表、列列表以及特定数据源的其他元数据。

此接口太大,无法在此文档中列出,但如果您有兴趣了解实现这些方法的策略,请查看 示例 HTTP 连接器 和 Cassandra 连接器。如果您的底层数据源支持模式、表和列,则此接口应该很容易实现。如果您尝试改编不属于关系数据库的东西(就像示例 HTTP 连接器一样),您可能需要在如何将数据源映射到 Presto 的模式、表和列概念方面进行创造性思考。

连接器拆分管理器

拆分管理器将表的數據分割成 Presto 将分发到工作器进行处理的单个块。例如,Hive 连接器列出每个 Hive 分区的檔案,并为每个檔案创建一个或多个拆分。对于没有分区数据的數據源,这里一个好的策略是简单地为整个表返回一个拆分。这是示例 HTTP 连接器采用的策略。

连接器记录集提供者

给定一个拆分和一个列列表,记录集提供者负责将数据传递到 Presto 执行引擎。它创建一个 RecordSet,而 RecordSet 又创建一个 RecordCursor,Presto 使用 RecordCursor 读取每行的列值。