簡體   English   中英

使用 ValueProvider 從 Dataflow 模板讀取 BigQuery 時出現異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM