簡體   English   中英

確定導致Google Dataflow作業失敗的特定輸入數據

[英]Determining specific input data which causes a Google Dataflow job to fail

我有一個問題,我使用Dataflow來解析文本文件,然后將相關數據放入BQ。 該問題似乎是由文本文件中的單行錯誤輸入引起的。 我能夠修復錯誤,但它讓我思考:如果我有一行輸入正在輸入Dataflow,有什么方法可以找到該行嗎? 這將使Dataflow調試的一部分變得更加容易,特別是如果您的輸入文件是幾十億行並且您必須追蹤導致問題的一行。

舉個例子,假設我發布的數據認為我認為是BigQuery的整數。 我可能會像這樣創建我的架構:

List<TableFieldSchema> fields = new ArrayList<>();
    fields.add(newTableFieldSchema().setName("ItemNum").setType("INTEGER"));

我可以使用此函數將輸入數據映射到BigQuery架構:

    public void processElement(ProcessContext c) {

        TableRow row = new TableRow();
        row.set("ItemNum", c.element()); 
        c.output(row);
    }

但是當Dataflow命中我的格式錯誤的輸入(它不是一個整數)時,我得到一個這樣的錯誤:

工作流程失敗。 原因:(30d455a6f7aaaaaa):項目“project-name”中的BigQuery作業“dataflow_job_3518531384490999999”以錯誤結束:作業錯誤:無法將值轉換為整數(錯誤值或超出范圍)。,錯誤:無法轉換值to integer(錯誤值或超出范圍)。,錯誤:無法將值轉換為整數(錯誤值或超出范圍)。,錯誤:無法將值轉換為整數(錯誤值或超出范圍)。,錯誤:無法將值轉換為整數(錯誤值或超出范圍)。,錯誤:無法將值轉換為整數(錯誤值或超出范圍)。

在這種特殊情況下,我應該在嘗試將其放入BigQuery之前驗證我的輸入是否為預期的整數(然后記錄任何未通過驗證的數據)。 但一般的問題仍然存在 - 假設我想看到導致此錯誤的輸入,因為(我認為)我已經執行了所有適當的輸入驗證,並且不知道哪種格式錯誤的數據可能會導致這種情況。 我該怎么辦? 我認為某種嘗試/捕獲類型技巧(可能涉及日志消息)可以工作,但我不確定如何實現這一點。

謝謝!

你建議的方法(使用try / catch,單獨記錄你的解析錯誤)是一個很好的方法。 我們正在積極研究為管道編寫者提供處理這類問題的選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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