Google cloud dataflow DynamicDestination中出错:Apache Beam

Google cloud dataflow DynamicDestination中出错:Apache Beam,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我在执行以下代码时出错: tableRows2.apply(BigQueryIO.writeTableRows() .to(新的动态估计){ 私有静态最终长serialVersionUID=1L; @凌驾 公共TableDestination可获取(TableRow dest){ 列表=侧输入(bqDataView); String table=list.get(0.get(“table”).toString(); String tableSpec=“ProjectId:DatasetId.”+

我在执行以下代码时出错:

tableRows2.apply(BigQueryIO.writeTableRows()
.to(新的动态估计){
私有静态最终长serialVersionUID=1L;
@凌驾
公共TableDestination可获取(TableRow dest){
列表=侧输入(bqDataView);
String table=list.get(0.get(“table”).toString();
String tableSpec=“ProjectId:DatasetId.”+表;
字符串tableDescription=“”;
返回新的TableDestination(tableSpec、tableDescription);
}
公共字符串getSideInputs(PCollectionView bqDataView){
String str=bqDataView.toString();
返回str;
}
@凌驾
公共表模式getSchema(表行目标){
列表=侧输入(bqDataView);
String[]schemas=list.get(0.get(“schema”).toString().split(“,”);
列表字段=新的ArrayList();

对于(int i=0;i我认为您向
DynamicDestinations
传递了侧输入。具体来说,由于您在调用
to(…)
的过程中调用了
getSideInputs
,因此您使用的是
getSideInputs
的结果,基本上如下:

tableRows2.apply(BigQueryIO.writeTableRows()
.to(bqDataView.toString())
查看
DynamicDestinations
的界面和BigQueryIO的测试,您似乎应该执行以下操作:

final PCollectionView bqDataView=/*…*/;
tableRows2.apply(BigQueryIO.writeTableRows()
.to(新的动态估计){
// ...
//注意:需要重写此方法并使用
//与DynamicDestinations中的签名相同。此外,
//不应将其作为应用程序的一部分调用。
@凌驾

public List我认为您向
DynamicDestinations
传递了侧输入。具体来说,由于您在
to(…)
调用中调用了
getSideInputs
,因此您使用的是
getSideInputs
的结果,基本上如下所示:

tableRows2.apply(BigQueryIO.writeTableRows()
.to(bqDataView.toString())
查看
DynamicDestinations
的界面和BigQueryIO的测试,您似乎应该执行以下操作:

final PCollectionView bqDataView=/*…*/;
tableRows2.apply(BigQueryIO.writeTableRows()
.to(新的动态估计){
// ...
//注意:需要重写此方法并使用
//与DynamicDestinations中的签名相同。此外,
//不应将其作为应用程序的一部分调用。
@凌驾
公开名单
new DynamicDestinations<TableRow, String>() {
  @Override
  public TableDestination getTable(String unusedDest) {
    // ...
  }

  @Override
  public TableSchema getSchema(String unusedDest) {
    ...
  }

  @Override
  public String getDestination(ValueInSingleWindow<TableRow> element) {
    return "destination";
  }
}