对知道Presto API插件的人的疑问。
我实现了BigQuery插件。 BigQuery支持struct
类型,可以在Presto中表示为RowType
类。
RowType
在RowBlockBuilder
中创建RowType::createBlockBuilder
,该方法具有RowBlockBuilder::appendStructure
方法,该方法只接受AbstractSingleRowBlock
类的实例。
这意味着在实现Presto的RecordCursor
BigQueryRecordCursor::getObject
方法时,我必须为类型为AbstractSingleRowBlock
的字段返回RowType
的值。
但是AbstractSingleRowBlock
具有包私有抽象方法,这使我无法实现此类。唯一的子SingleRowBlock
具有包私有构造函数,并且没有工厂或构建器可以为我构建实例。
如何在struct
中实现BigQueryRecordCursor::getObject
支持?
(提醒:BigQueryRecordCursor
是RecordCursor
的子代。)
答案 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
以下是处理行类型的方法:
另外,我建议您加入Presto Community Slack上的ConnectorPageSource
频道,所有Presto开发人员都可以在那里闲逛。