複雜類型數組似乎總是評價陣列<字符串>。因此,鑄造用空數組值或試圖加載JSON數據失敗。例如,試圖把一個JSON值{“喜歡”:[]…}在負載下表模式失敗有以下錯誤:
模式:
數組< struct < gid:字符串,用戶:struct < gid:字符串,名稱:字符串,resource_type: string > > >
錯誤:
“錯誤複製:[DATATYPE_MISMATCH。CAST_WITHOUT_SUGGESTION]不能解決“喜歡”由於數據類型不匹配:不能把“數組<字符串>”“數組< STRUCT < gid:字符串、用戶:STRUCT < gid:字符串,名稱:字符串,resource_type: STRING > > >”
什麼是最好的方法來處理空/空complex-typed數組?
嗨@Jake圖中,發生錯誤,因為係統無法確定空數組的結構,假設它是一個數組<字符串>,它不匹配預期的模式。
處理空/空complex-typed數組,您可以使用JSON預處理步驟輸入或修改您的查詢處理空數組的場景。
JSON數據加載到餐桌前,您可以進行預處理以確保空數組至少有一個元素為每個字段空值,這將有助於維護模式。
例如,考慮到JSON對象:
{"喜歡":[]}
預處理它:
{"喜歡":[{“gid”: null, "用戶":{“gid”:空,“名字”:空,“resource_type”:零}}]}
你可以使用一個CASE語句查詢處理空數組,而鑄造或加載數據。這裏有一個例子使用BigQuery SQL查詢語法:
選擇如果(ARRAY_LENGTH(喜歡)> 0,數組< STRUCT < gid:字符串、用戶:STRUCT < gid:字符串,名稱:字符串,resource_type: STRING > > >(喜歡),數組< STRUCT < gid:字符串、用戶:STRUCT < gid:字符串,名稱:字符串,resource_type: STRING > > > (STRUCT (null,結構(空,空,空))))從your_table_name
這個查詢檢查“喜歡”數組的長度。如果非空,數組按原樣。
如果空,它創建了一個數組和一個null-filled元素相匹配的模式。注意,語法可能取決於您的SQL方言。
選擇的方法,最適合您的需求和您正在使用的工具。
預處理JSON數據能夠幫助維護模式一致性,同時修改查詢允許您直接在SQL代碼處理空數組。