我尝试运行查询以从BigQuery中的一个表中选择数据,并将数据写入另一个BigQuery表。但是,我遇到了打字问题,其中BigQueryIO(2.x)表示它无法随后写入数据,因为返回的类型是TypedRead,而不是PCollection
这是我的代码:
p.apply("ReadCampaignQueries", BigQueryIO.read().from(options.getInputCampaignsTable()))
.apply("RunQueries", MapElements
.into(new TypeDescriptor<BigQueryIO.Read>() {})
.via((TableRow row) -> {
String query = row.get("eligibilityQuery").toString();
return BigQueryIO.read().fromQuery(query);
}))
.apply("WriteEligibilities", MapElements
.into(new TypeDescriptor<BigQueryIO.Write>() {})
.via((BigQueryIO.Read read) -> BigQueryIO.write()
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
.to(options.getOutputEligibilitiesTable())));
有没有明显的理由说明为什么这个管道最终不会将查询结果写入指定的表?
值得注意的是,这些读取主要发生在遗留的BigQuery表上,而标准SQL还没有完成。但我试图写一个新创建的表没有这个遗留问题。
注意:我也尝试使用readTableRows()而不是read(),但遇到看似无法解决的输入错误。