Presto 中的行类型支持
RowType support in Presto
向了解 Presto API 插件的人提问。
我实现了 BigQuery 插件。 BigQuery 支持 struct
类型,在 Presto 中可以表示为 RowType
class。
RowType
在 RowType::createBlockBuilder
中创建 RowBlockBuilder
,它有 RowBlockBuilder::appendStructure
方法,只需要接受 AbstractSingleRowBlock
class 的实例。
这意味着在我实施 Presto 的 RecordCursor
BigQueryRecordCursor::getObject
方法时,我必须 return 某些 AbstractSingleRowBlock
类型的字段 RowType
.
但是AbstractSingleRowBlock
有包私有抽象方法,这使我无法实现这个class。唯一的 child SingleRowBlock
有 package private constructor,没有工厂或建造者可以为我建造一个实例。
如何在 BigQueryRecordCursor::getObject
中实现 struct
支持?
(提醒:BigQueryRecordCursor
是 RecordCursor
的 child)。
您需要通过调用 beginBlockEntry
assemble 行的块,通过 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 connector是如何实现的:
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 上的 #dev
频道,所有 Presto 开发人员都在这里闲逛。
向了解 Presto API 插件的人提问。
我实现了 BigQuery 插件。 BigQuery 支持 struct
类型,在 Presto 中可以表示为 RowType
class。
RowType
在 RowType::createBlockBuilder
中创建 RowBlockBuilder
,它有 RowBlockBuilder::appendStructure
方法,只需要接受 AbstractSingleRowBlock
class 的实例。
这意味着在我实施 Presto 的 RecordCursor
BigQueryRecordCursor::getObject
方法时,我必须 return 某些 AbstractSingleRowBlock
类型的字段 RowType
.
但是AbstractSingleRowBlock
有包私有抽象方法,这使我无法实现这个class。唯一的 child SingleRowBlock
有 package private constructor,没有工厂或建造者可以为我建造一个实例。
如何在 BigQueryRecordCursor::getObject
中实现 struct
支持?
(提醒:BigQueryRecordCursor
是 RecordCursor
的 child)。
您需要通过调用 beginBlockEntry
assemble 行的块,通过 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 connector是如何实现的:
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 上的 #dev
频道,所有 Presto 开发人员都在这里闲逛。