2016-05-06 35 views
1

我正在使用Java API從幹運行查詢中獲取模式,但當我們需要實際需要時,我得到的模式包含可空字段。幹運行標誌的模式必填字段爲空

例如,使用此查詢:

SELECT word FROM `bigquery-public-data.samples.shakespeare` 

即使「字」字段中的表所需,結果我得到的回覆是

com.google.api.services.bigquery.model.TableSchema = 
{"fields":[{"mode":"NULLABLE","name":"word","type":"STRING"}]} 

難道這應該發生的?

回答

1

是的,可能發生這種情況 - 查詢結果可能與表模式有不同的NULLABLE和REQUIRED,即使查詢只是選擇字段。一般而言,列可空性的傳播是脆弱的,所以最好不要依賴它。

P.S.它看起來像你使用標準的SQL https://cloud.google.com/bigquery/sql-reference/(儘管類似的事情也可能發生在傳統的SQL中)。

+0

我認爲從幹運行查詢中獲取模式僅適用於標準SQL - 以前我們通過創建視圖來獲取模式,該視圖正確保留了必填字段。你能否更詳細地說明查詢結果對於所需字段是否有空值?是否還有另一種方式獲得與視圖相同的模式(因爲視圖尚不支持標準SQL)? –

+0

讓我以不同的方式提問 - 爲什麼你在乎它是否會被標記爲REQUIRED或NULLABLE?你的應用程序有哪些變化? –

+0

我的團隊正在圍繞大型查詢客戶端構建類型安全的Scala API,我們的部分方法是將可空字段映射到Scala選項類型。這又意味着這個類型安全的API的用戶將會看到他們期望被需要的字段的選項類型。當然,這些應用程序可以自由地解壓縮選項,但這會成爲混淆的根源,並且有些打破了類型安全的目的。使用傳統SQL,我們通過從查詢中創建視圖來獲取模式,該視圖保留了必需的字段。但是現在使用空運行,必填字段可以爲空,所以一切都是選項。 –