2015-05-15 61 views
1

我們的要求是處理Google DFP廣告管理系統直接寫入我們的GCS存儲區的最近24小時的Google AdSense日誌。忽略/跳過不存在的GCS輸入文件

我們目前通過使用拼合,並傳入過去24小時的所有文件名來實現此目的。文件名是yyyyMMdd_hh格式。

但是,我們發現有時DFP在某些時段無法寫入文件。我們已將此問題提交給DFP廣告管理系統專家。

但是,有沒有辦法將我們的Dataflow作業配置爲忽略任何缺少的GCS文件,並且在這種情況下不會失敗?如果一個或多個文件不存在,它目前失敗。

+0

你還對這個用例感興趣嗎? –

+0

當然。目前我們需要有一個解決方法,它爲流程增加了很多時間(查詢GCS以查看每個文件是否存在,如果不存在,則將其從源URI列表中移除) –

回答

-1

也許不是最好的答案,但你可以隨時使用

GcsUtilFactory.create(options).expand(...) 

抓住其中存在的所有文件。然後,您可以相應地創建展平。

等待更專業的答案。

+0

我會看看進入這個。但我不確定我是否明白你的意思。 –

+0

根據文檔,expand()方法「可能會返回不存在的文件,因此不應該使用它來驗證GCS中是否存在文件」。所以這是行不通的。 –

1

使用Dataflow APIs如TextIO.ReadAvroIO.Read從一個不存在的文件讀取當然會引發錯誤並導致管道失敗。這是按預期工作的,我想不出一個解決方法。

現在,從像yyyyMMdd_*這樣的文件模式中讀取數據可以解決您的問題,至少部分解決您的問題。數據流將文件模式擴展爲一組文件並處理它們。只要存在至少一個與提供的模式相匹配的文件,流水線就應該繼續。

每個文件有一個源文件的方法通常是反模式 - 它效率較低,不太優雅,但在功能上相同。不過,您仍然可以在構建Dataflow管道之前使用Google Cloud Storage API修復它,以確認每個文件的存在。如果輸入文件不存在,則可以簡單地跳過生成其中一個源文件。

無論哪種方式,請記住GCS list API提供的最終一致性保證。這意味着擴展文件模式可能不會立即生成否則可讀的所有文件。但是,對於這種情況,反模式可能是一個很好的解決方法。