Presto中的RowType支持

时间:2019-12-24 15:19:07

标签: presto

对知道Presto API插件的人的疑问。

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

您需要通过调用https://tfhub.dev/google/Wiki-words-250/2 来为行汇编该块,并通过beginBlockEntry将每个列的值附加到列的类型,然后是Type.writeXXX。这是一些伪代码。

closeEntry

但是,我建议您改用柱状API(即BlockBuilder builder = type.createBlockBuilder(..); builder = builder.beginBlockEntry(); for each column { ... columnType.writeXXX(builder, ...); } builder.closeEntry(); return (Block) type.getObject(builder, 0); 和朋友)。看一下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 Community Slack上的ConnectorPageSource频道,所有Presto开发人员都可以在那里闲逛。