2013-06-01 66 views
0

我有一個定期加載作業,每小時通過json數據格式運行並將數據導入bigQuery。這個過程幾個月來一直運行良好,現在突然間bigQuery已經開始拋出關於丟失必填字段的錯誤。大查詢在加載作業時拋出無效錯誤

當然,我所做的第一件事情就是檢查我的模式,並與其中一個JSON文件進行比較,並確保所有必填字段都存在。 Bigquery不會在這方面投入太多信息,而且我已經檢查並重新檢查了20次數據,因爲我經常缺少一些東西。

這是後端問題嗎?或者可能格式化要求已更改?一個完美的例子是工作#job_2ee5a4be176c421985d7c3eaa84abf4b。它告訴我「缺少必填字段」,其中只有4我的模式 - 我檢查我的JSON這個特定的工作,他們都在那裏。

任何燈光在此將非常有幫助,在此先感謝!

json的樣本,只有前4個字段在我的模式中是必需的,他們都在那裏!我也有雙重檢查,以確保沒有多餘的字段是JSON和JSON每上一個新行等:

{"date":"2013-05-31 20:56:41","sdate":1370033801,"type":"0","act":"1","cid":"139","chain":"5156","hotel":"21441","template":"default","arrival":"2013-08-04 00:00:00","depart":"2013-08-05 00:00:00","window":"64","nights":"1","total":"0.0000","dailyrate":"0.0000","session":"1530894334","source":"google","keyword":"the carolina hotel chapel hill nc","campaign":"organic","medium":"organic","visits":"2","device":"pc","language":"en-us","ip":"gc.synxis.com","cookies":"2","base_total":"0.0000","base_rate":"0.0000","batch":"batch_1370045767"}

+0

你好!我在Google上處理這個功能。我現在正在研究你的問題 - 最近JSON導入的方式發生了變化,這可能與你正在經歷的事情有關。 –

+0

它看起來像你有5個必填字段 - 一個被稱爲「貨幣」?而不是在這裏設置?我試圖理解爲什麼舊代碼會接受這一點而不抱怨。 –

+0

嗨喬希,非常感謝您的關注!我的貨幣字段是(可)爲空的嵌套記錄。你認爲這種變化意味着現在必須以某種方式表示所有嵌套記錄嗎? – Shanster

回答

1

我是一名谷歌工程師誰在BigQuery的工作。抱歉,添麻煩了;看起來您錯過了名爲currencies的所需RECORD字段。

看來,舊的代碼是由於一個錯誤接受這個。即使沒有在JSON中指定,也會創建空的RECORD字段。因此,字段即REQUIRED可以省略而不會觸發錯誤。但是,正確的行爲是觸發錯誤,這是當前代碼的作用。

不幸的是,錯誤消息不告訴你哪個必填字段丟失。這是當前版本代碼中的TODO。

+0

完美,謝謝!我做了改變,現在它可以工作。我沒有意識到嵌套記錄不能真正爲空 - 我沒有在我的模式中指定它們,所以我假設它們默認是必需的?無論如何,非常感謝您的幫助!我希望別人覺得這很有用。 – Shanster

+0

很高興這是有益的!一個隊友告訴我,你應該能夠更新你的模式,並將記錄字段設置爲「NULLABLE」。這會讓你繼續像以前一樣導入。 –

+0

嗨@JoshHaberman。我發現這個TODO完全留在了一年前的地方。這是非常不幸的 - 想象一個架構超出了一個玩具的例子,有十幾個必需和可選領域。我們究竟應該猜測缺少哪個「缺少必填字段」? 是否有可能提高此TODO的優先級? – Roman