![](/img/trans.png)
[英]Exception when trying to use JDBC to BigQuery template when using Google's Dataflow
[英]Exception when reading BigQuery from Dataflow template using ValueProvider
我正在嘗試創建一個模板以從 BigQuery 讀取,不幸的是我在嘗試構建模板時遇到異常。
執行 Java 類時發生異常。 如果表是動態設置的,則無法調用驗證。
閱讀文檔,似乎在從批處理模板讀取 BigQuery 時有一個特殊的函數要調用:
注意:如果要運行從 BigQuery 讀取的批處理管道,則必須對所有 BigQuery 讀取使用.withTemplateCompatibility() 。
所以,這是我的代碼片段:
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>
我相信您面臨的錯誤在這里定義。 請注意其中提到的解釋
請注意,如果表或數據集是由管道的早期階段創建的,或者查詢依賴於管道的早期階段,則表或查詢檢查可能會失敗。
要解決此問題,請嘗試在 BigQueryIO.read 調用中添加withoutValidation 方法。
順便說一句, withoutValidation() 需要添加到鏈的末尾,如下所示。
// queryString is of type ValueProvider<String>
PCollection<TableRow> rowsFromBigQuery = pipeline.apply(
BigQueryIO.readTableRows()
.fromQuery(queryString)
.usingStandardSql()
.withMethod(options.getReadMethod())
.withoutValidation());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.