我有大約1000個文件有七列。其中一些文件有幾行有第八列(如果有數據的話)。靈活的模式與谷歌Bigquery
將此加載到BigQuery中的最佳方式是什麼?我必須找到並編輯所有這些文件到 - 在所有文件中添加一個空的第八列 - 從所有文件中刪除第八列?我不在乎這一欄的價值。
有沒有辦法指定架構中的八列,並在沒有可用數據時爲第八列添加一個空值。
我正在使用BigQuery API來加載數據,如果這可能有所幫助。
我有大約1000個文件有七列。其中一些文件有幾行有第八列(如果有數據的話)。靈活的模式與谷歌Bigquery
將此加載到BigQuery中的最佳方式是什麼?我必須找到並編輯所有這些文件到 - 在所有文件中添加一個空的第八列 - 從所有文件中刪除第八列?我不在乎這一欄的價值。
有沒有辦法指定架構中的八列,並在沒有可用數據時爲第八列添加一個空值。
我正在使用BigQuery API來加載數據,如果這可能有所幫助。
您可以使用'allowJaggedRows'參數,該參數將行的末尾不存在的值視爲空值。所以你的模式可以有8列,並且所有沒有這個值的行都是空的。
這是記錄在這裏:https://developers.google.com/bigquery/docs/reference/v2/jobs#configuration.load.allowJaggedRows
我已經提交了一份文檔的錯誤,使這個更容易找到。
如果您的日誌是JSON,您可以定義一個可爲空的字段,如果它沒有出現在記錄中,它將保持爲空。 我不知道它如何與CSV一起工作,但我認爲你必須有所有的領域(甚至是空的)。
不幸的是我的源文件是CSV格式。 –
這裏有一個可能的解決方案,如果你不想擔心要改變CSV值(這將是我的建議,否則)
如果行有八個參數的數量相當小,您可以承擔「犧牲」這些行,然後您可以傳遞一個合理數量的maxBadRecords參數。在這種情況下,所有「壞」行(即不符合模式的行)都將被忽略,並且不會被加載。
如果您使用bigquery獲取統計信息並且可以忽略這些行,它可以解決您的問題。
我沒有檢查過,但據我所知,它約佔數據的10%。特別是考慮到我們正在付費接收這些數據,所以要犧牲太多的信息。 –
然後太糟糕了。無論如何,這是值得評論的。在這種情況下,恐怕你需要對行進行標準化,或者將空列添加到所有行中,或者將其從所在列表中刪除。 –
找到了一個可行的「黑客」。 使用七列模式爲每個文件執行一項作業,然後在具有八列模式的所有文件上運行另一項作業。其中一項工作將成功完成。節省我的時間分別編輯每個文件並重新上傳1000多個文件。
工作起來就像一個魅力!謝謝 –