即使接收到的數據少於預期的列數,是否可以插入記錄? 我經常收到以下消息。在大查詢中跳過一致性檢查
Too few columns: expected 24 column(s) but got 22 column(s)
如果我使用max_bad_record選項忽略這些記錄,我會丟失數據。我希望看到一個選項,如果需要,可以通過添加額外的分隔符強制插入記錄。
即使接收到的數據少於預期的列數,是否可以插入記錄? 我經常收到以下消息。在大查詢中跳過一致性檢查
Too few columns: expected 24 column(s) but got 22 column(s)
如果我使用max_bad_record選項忽略這些記錄,我會丟失數據。我希望看到一個選項,如果需要,可以通過添加額外的分隔符強制插入記錄。
正如Michael Sheldon在下面提到的那樣,如果您指定了allowJaggedRows,那麼列數太少的行將爲其餘所有列獲得NULL。但是,如果在該行中間缺少列,BigQuery不知道缺少哪個列,並且如果這些類型不匹配,則會爲該行獲取錯誤。
有一些關於將所有包含錯誤的行添加到單獨的表中的說法,以便您可以處理它們並將它們附加到原始表中。如果你會發現這個有用,讓我知道。
將數據預處理爲正確的格式;取決於你的平臺,如果你可以使用perl,sed或其他。
也許你可以簡單地在所有記錄中添加額外的分隔符,如果bigquery不會抱怨太多的字段。
是的,您現在可以使用作業加載配置中的allowJaggedRows
選項執行此操作。此選項會導致負載「接受缺少結尾可選列的行,缺少的值被視爲空值。」有關所有作業配置選項的完整列表,請參閱BigQuery Jobs Reference。
在創建和加載新表時,該選項在bq命令行工具中可用:bq load --allow_jagged_rows
和BigQuery UI下的「高級選項」。
請添加--force選項,假設缺少的列在最後。當涉及到數據完整性時,使用此選項的用戶將自行處理。 – shantanuo
我建議在數據被攝入BigQuery之前,在提取和轉換步驟中處理數據完整性。一般來說,我不認爲數據管道的分析層應該負責處理來自管道其他部分的數據一致性問題。 –
如果我需要3列管道分隔文件,我可以使用awk#awk -F'|' 'BEGIN {OFS =「|」} {print $ 1,$ 2,$ 3}'#但我無法自動執行導入流程。我必須解壓縮,打開文件,運行awk,zip並繼續。 #強制選項真的有幫助,請考慮。 – shantanuo