gpt4 book ai didi

java - BigTable 的 InstanceID 和 TableID 管道未接受 ValueProvider

转载 作者:行者123 更新时间:2023-12-02 01:13:46 26 4
gpt4 key购买 nike

我正在尝试通过通用数据流代码写入 BigTable。我所说的通用是指它必须能够使用 ValueProvider 写入运行时作为参数提供的任何 BigTable 表。该代码没有显示任何错误,但是当我尝试创建代码模板时,我可以看到以下错误消息:

Exception in thread "main" java.lang.IllegalStateException: Value only available at runtime, but accessed from a non-runtime context: RuntimeValueProvider{propertyName=bigTableInstanceId, default=null}

这很奇怪,因为支持提供 ValueProviders 的功能。

下面是我用来写入 BigTable 的代码:

results.get(btSuccessTag).apply("Write to BigTable",
CloudBigtableIO.writeToTable(new CloudBigtableTableConfiguration.Builder()
.withProjectId(options.getProject())
.withInstanceId(options.getBigTableInstanceId())
.withTableId(options.getBigTableTable())
.build()));

定义 ValueProvider 的接口(interface)是:

public interface BTPipelineOptions extends DataflowPipelineOptions{
@Required
@Description("BigTable Instance Id")
ValueProvider<String> getBigTableInstanceId();
void setBigTableInstanceId(ValueProvider<String> bigTableInstanceId);

@Required
@Description("BigTable Table Destination")
ValueProvider<String> getBigTableTable();
void setBigTableTable(ValueProvider<String> bigTableTable);

@Required
@Description("BT error file path")
ValueProvider<String> getBTErrorFilePath();
void setBTErrorFilePath(ValueProvider<String> btErrorFilePath);
}

如果我在这里遗漏了什么,请告诉我。

最佳答案

不幸的是,CloudBigtableIO 参数似乎没有更新为由模板通过 ValueProvider 进行修改。虽然 BigtableIO 与 ValueProviders 兼容。

为了使 Dataflow 模板能够在从模板启动时修改参数,必须首先将其使用的库转换(即源和接收器)更新为用户 ValueProvider,以便将参数一直更新到库代码中,当使用该参数时。查看有关 ValueProvider 的更多详细信息在这里。

但是,我们有示例模板管道,可与 BigtableIO 而不是 CloudBigtableIO 配合使用。请参阅AvroToBigtable 。所以我认为你有几个选择

  1. 使用 Bigtable template examples 之一更新您的自定义管道作为一个可以遵循的例子。请务必使用 BigtableIO 而不是 CloudBigtableIO
  2. 更新 CloudBigtableIO 以始终使用 ValueProvider,直到使用该参数。请参阅creating_templates ,以及 BigtableIO 中正确使用 ValueProvider 的示例。将其贡献给 apache beam 的 github,或在本地扩展/修改该类。
  3. 查看现有的 Bigtable 模板管道是否满足您的需求。您可以launch them from the Dataflow UI .

我希望这对你有用。如果我解释得很好请告诉我。或者如果我忽略了某些事情。

关于java - BigTable 的 InstanceID 和 TableID 管道未接受 ValueProvider<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58969868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com