我试图在Apache Beam中使用BigtableIO的运行时参数来写入BigTable。
我创建了一个从BigQuery读取并写入Bigtable的管道。 当我提供静态参数时,管道工作正常(使用ConfigBigtableIO和ConfigBigtableConfiguration,这里引用示例 - https://github.com/GoogleCloudPlatform/cloud-bigtable-examples/blob/master/java/dataflow-connector-examples/src/main/java/com/google/cloud/bigtable/dataflow/example/HelloWorldWrite.java)但是在尝试使用运行时参数设置管道时遇到编译错误。 设置选项,所有参数都是运行时值提供程序。
p.apply(BigQueryIO.readTableRows().fromQuery(options.getBqQuery())
.usingStandardSql())
.apply(ParDo.of(new TransFormFn(options.getColumnFamily(), options.getRowKey(), options.getColumnKey(), options.getRowKeySuffix())))
.apply(BigtableIO.write().withProjectId(options.getBigtableProjectId()).
withInstanceId(options.getBigtableInstanceId()).
withTableId(options.getBigtableTableId()));
期望Bigtable.write()的输出为org.apache.beam.sdk.transforms.PTransform,OutputT> 而Bigtable.write()返回一个Write对象。 你能帮忙提供正确的语法来解决这个问题吗?谢谢。
答案 0 :(得分:2)
运行时参数旨在用于数据流模板。
您是否尝试使用模板创建模板并运行管道?如果是,您需要执行以下步骤:
使用模板的优点是它允许管道构造一次,并且稍后使用运行时参数执行多次。 有关如何使用数据流模板的更多信息:https://cloud.google.com/dataflow/docs/templates/overview
不使用Dataflow模板时,您没有设置运行时参数,即withTableId(ValueProvider tableId)。而是使用withTableId(String tableId)。
希望这有帮助!