我有类型为String的PCollection< String> ,我想将其转换为从BigQuery表中获取特定列的值。所以我使用 BigQueryIO.readTableRows 从BigQuery获取值。
这是我的代码:
PCollection<TableRow> getConfigTable = pipeline.apply("read from Table",
BigQueryIO.readTableRows().from("TableName"));
RetrieveDestTableName retrieveDestTableName = new RetrieveDestTableName();
PCollection<String> getDestTableName = getConfigTable.apply(ParDo.of(new DoFn<String,String>(){
@ProcessElement
public void processElement(ProcessContext c){
c.output(c.element().get("ColoumnName").toString());
}
}));
根据上面的代码,我将从PCollection&lt; String&gt;类型的 getDestTableName 获得输出。但我想在 String 变量中输出此输出。
有没有办法将 PCollection&lt; String&gt; 转换为 String 数据类型变量,以便我能够在我的代码中使用变量?
答案 0 :(得分:1)
Apache Beam编程模型中无法将PCollection<String>
转换为String
。 PCollection
只是描述任何给定点的管道状态。在开发过程中,您无法对PCollection
中的字符串进行文字访问。
您可以通过转换处理PCollection
中的字符串。但是,您似乎需要表配置来构建管道的其余部分。您需要提前知道目标,或者可以使用DynamicDestinations来确定在管道执行期间要写入哪个表。您无法从PCollection
获取表配置值,并使用它来进一步构建管道。
答案 1 :(得分:0)
似乎你需要像JdbcIO.readAll()
这样的东西,但对于BigQuery,允许管道动态计算读取配置。目前没有为BigQuery实现这一点,但它是一个合理的请求。
同时你的选择是:
BigQueryIO.read().fromQuery()
PCollection
s。