Presto 中的 RowType 支持



对于那些知道Presto API插件的人的问题。

我实现了BigQuery插件。BigQuery 支持struct类型,可以在 Presto 中表示为RowType类。

RowTypeRowType::createBlockBuilder中创建RowBlockBuilder,该方法具有RowBlockBuilder::appendStructure方法,该方法只需要接受AbstractSingleRowBlock类的实例。

这意味着在我实现 Presto 的RecordCursorBigQueryRecordCursor::getObject方法时,我必须返回对类型为RowType的字段AbstractSingleRowBlock的东西。

但是AbstractSingleRowBlock有包私有抽象方法,这使我无法实现此类。唯一的子SingleRowBlock具有包私有构造函数,并且没有工厂或构建器可以为我构建实例。

如何在BigQueryRecordCursor::getObject中实现struct支持? (提醒:BigQueryRecordCursorRecordCursor的孩子(。

您需要通过调用beginBlockEntry来组装行的块,通过Type.writeXXX将每列的值与列的类型附加,然后closeEntry。下面是一些伪代码。

BlockBuilder builder = type.createBlockBuilder(..);
builder = builder.beginBlockEntry();
for each column {
...
columnType.writeXXX(builder, ...);
}
builder.closeEntry();
return (Block) type.getObject(builder, 0);

但是,我建议您改用列式 API(即ConnectorPageSource和朋友(。看看 Elasticsearch 连接器是如何实现它的:

https://github.com/prestosql/presto/blob/master/presto-elasticsearch/src/main/java/io/prestosql/elasticsearch/ElasticsearchPageSourceProvider.java https://github.com/prestosql/presto/blob/master/presto-elasticsearch/src/main/java/io/prestosql/elasticsearch/ElasticsearchPageSource.java

以下是它处理行类型的方式:

https://github.com/prestosql/presto/blob/master/presto-elasticsearch/src/main/java/io/prestosql/elasticsearch/decoders/RowDecoder.java

另外,我建议你加入Presto社区Slack上的#dev频道,所有Presto开发人员都在这里闲逛。

相关内容

  • 没有找到相关文章

最新更新