【发布时间】:2019-04-30 06:11:03
【问题描述】:
我正在尝试创建一个从 BigQuery 读取的模板,不幸的是,我在尝试构建该模板时遇到了异常。
执行 Java 类时发生异常。如果表是动态设置的,则无法调用 validate。
阅读the documentation,似乎在从批处理模板中读取BigQuery时需要调用一个特殊的函数:
注意:如果您想运行从 BigQuery 读取数据的批处理流水线, 您必须在所有 BigQuery 读取中使用 .withTemplateCompatibility()。
所以,这是我的代码 sn-p :
PCollection<Discount> discountFromBigQuery = p.apply("Parse Discounts from BigQuery", BigQueryIO.read((SerializableFunction<SchemaAndRecord, Discount>) record -> {
GenericRecord row = record.getRecord();
return new Discount(row);
}).withTemplateCompatibility().from(options.getBigQueryDiscountPath()).withCoder(SerializableCoder.of(Discount.class)));
显然,options.getBigQueryDiscountPath() 是 ValueProvider<String>
那么,我怎样才能摆脱这个错误并模板化 BigQuery 阅读部分?
这是我使用的 maven 依赖项:
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.google.cloud.dataflow</groupId>
<artifactId>google-cloud-dataflow-java-sdk-all</artifactId>
<version>2.5.0</version>
</dependency>
【问题讨论】:
标签: java google-cloud-platform google-bigquery google-cloud-dataflow apache-beam