0

那些知道 Presto API for plugins 的人的问题。

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

RowType创建RowBlockBuilderin RowType::createBlockBuilder,它有RowBlockBuilder::appendStructure方法,它只需要接受AbstractSingleRowBlock类的实例。

这意味着在我的 PrestoRecordCursor BigQueryRecordCursor::getObject方法的实现中,我必须返回一些AbstractSingleRowBlock用于具有 type 的字段的东西RowType

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

如何实施struct支持BigQueryRecordCursor::getObject?(提醒:BigQueryRecordCursor是 的孩子RecordCursor)。

4

1 回答 1

4

您需要通过调用来组装行的块,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 Community Slack#dev上的频道,所有 Presto 开发人员都在那里闲逛。

于 2019-12-24T17:32:09.840 回答