Google bigquery 如何转换Pcollection<;字符串>;变量转换为字符串

Google bigquery 如何转换Pcollection<;字符串>;变量转换为字符串,google-bigquery,google-cloud-storage,google-cloud-dataflow,Google Bigquery,Google Cloud Storage,Google Cloud Dataflow,我有一个字符串类型的PCollection,我想将其转换为从BigQuery表中获取特定列的值。所以我使用BigQueryIO.readTableRows从BigQuery中获取值 这是我的密码: PCollection<TableRow> getConfigTable = pipeline.apply("read from Table", BigQueryIO.readTableRows().from("TableName")); Ret

我有一个字符串类型的PCollection,我想将其转换为从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 getConfigTable=pipeline.apply(“从表中读取”,
BigQueryIO.readTableRows().from(“TableName”);
RetrieveDestTableName RetrieveDestTableName=新RetrieveDestTableName();
PCollection getDestTableName=getConfigTable.apply(ParDo.of(new DoFn()){
@过程元素
公共void processElement(ProcessContext c){
c、 输出(c.element().get(“columnname”).toString();
}
}));
根据上面的代码,我将从getDestTableName获得PCollection类型的输出,但我希望该输出为字符串变量


是否有任何方法将PCollection转换为String数据类型变量,以便我能够在代码中使用变量?

在Apache Beam编程模型中,无法将
PCollection
转换为
String
PCollection
仅描述管道在任何给定点的状态。在开发过程中,您没有对
PCollection
中的字符串的文本访问权限


您可以通过转换处理
PCollection
中的字符串。但是,似乎需要表配置来构建管道的其余部分。您需要提前知道目的地,或者可以使用它来确定在管道执行期间写入哪个表。您无法从
PCollection
获取表配置值并使用它进一步构造管道。

在Apache Beam编程模型中,无法将
PCollection
转换为
字符串。
PCollection
仅描述管道在任何给定点的状态。在开发过程中,您没有对
PCollection
中的字符串的文本访问权限


您可以通过转换处理
PCollection
中的字符串。但是,似乎需要表配置来构建管道的其余部分。您需要提前知道目的地,或者可以使用它来确定在管道执行期间写入哪个表。您无法从
PCollection
获取表配置值,并使用它进一步构造管道。

似乎您需要类似于
JdbcIO.readAll()
的内容,但对于BigQuery,允许管道动态计算读取配置。这是目前没有实现的BigQuery,但这将是一个合理的要求

同时,您的选择是:

  • 将您正在做的事情表示为更复杂的BigQuery SQL查询,并使用单个
    BigQueryIO.read().fromQuery()
  • 表示管道中提取感兴趣的表的部分,不使用Beam API,而是直接使用BigQuery API,因此您操作的是常规Java变量,而不是
    PCollection
    s

似乎您需要类似于
JdbcIO.readAll()
的东西,但对于BigQuery,允许通过管道动态计算读取配置。这是目前没有实现的BigQuery,但这将是一个合理的要求

同时,您的选择是:

  • 将您正在做的事情表示为更复杂的BigQuery SQL查询,并使用单个
    BigQueryIO.read().fromQuery()
  • 表示管道中提取感兴趣的表的部分,不使用Beam API,而是直接使用BigQuery API,因此您操作的是常规Java变量,而不是
    PCollection
    s

谢谢@Andrew这对我很有用。是否可以在DynamicDestination转换中动态获取BigQuery表模式信息?你能用例子给我解释一下吗?这对我真的很有帮助。@ShubhamR,
DynamicDestinations
transform不提供动态检索
TableSchema
的方法。理想情况下,您希望提前向转换提供所有
表模式
s,以便在执行期间不会检索模式(开销)。在
getSchema()
方法中,您可以实现像if语句一样简单的东西,该语句根据
destination:String
参数确定要使用哪个
TableSchema
。谢谢@Andrew,它适合我。是否可以在DynamicDestination转换中动态获取BigQuery表模式信息?你能用例子给我解释一下吗?这对我真的很有帮助。@ShubhamR,
DynamicDestinations
transform不提供动态检索
TableSchema
的方法。理想情况下,您希望提前向转换提供所有
表模式
s,以便在执行期间不会检索模式(开销)。在
getSchema()
方法中,可以实现像if语句这样简单的语句,该语句根据
destination:String
参数确定要使用哪个
TableSchema