BigQuery通常在加載Avro數據方面做得很好,但「bq load」在使用Avro logicalType屬性的時間戳和其他日期/時間字段中遇到了很多問題。Avro日期和時間與BigQuery的兼容性?
- 當BigQuery TIMESTAMP將它們解釋爲微秒時間戳(關閉1000)時,我的數據與Avro類型timestamp-millis發生了衝突。
- 可以加載到TIMESTAMP中的timestamp-micros整數在BigQuery DATETIME中變爲INVALID。我找不到解釋什麼是有效的解釋https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types
- ISO8601格式的字符串不能加載到TIMESTAMP或DATETIME(不兼容的類型錯誤),但我認爲BigQuery會支持,如果我加載純JSON。
- Avro「date」類型無法加載到DATE(也是不兼容的類型)。
我想我可以通過總是將數據加載到臨時字段並使用CAST查詢或將它們轉換爲其他字段來解決這些問題,但這並不會擴展或支持模式演變或流式傳輸。在Avro中用明確定義的模式生成數據應該避免爲不同消費者再次轉換數據的額外步驟。
BigQuery真的與Avro日期和時間不兼容嗎? (或者我在做什麼愚蠢的事情)
或者是「bq load」這裏的問題?有沒有更好的方法來加載Avro數據?
具有樣品文件可以幫助調試此問題(如果它是一個錯誤:
加載的Avro文件表一中時間戳字段的示例,在這裏發帖https://code.google.com/p/google-bigquery/issues/list) –
我不知道它是一個bug還是BigQuery不支持將Avro數據加載到TIMESTAMP,DATETIME和DATE數據類型。 https://cloud.google.com/bigquery/data-formats#avro_format沒有提及這三種類型中的任何一種。我不知道如何在這裏附加二進制Avro數據文件。 – Kevin