2015-01-21 59 views
1

我們使用BigQuery的Python API(特別是jobs資源)在現有的BigQuery表上運行查詢,並通過將結果數據集插入到新的BigQuery表(destinationTable)中來導出結果。Google BigQuery API,如何設置destinationTable的字段類型?

有沒有辦法更新新創建的表的模式並設置特定的數據類型?默認情況下,所有字段都設置爲「字符串」類型,但我們需要其中一個字段爲「時間戳」。

回答

0

目標表的字段類型將自動設置。如果您需要將字符串轉換爲整數或時間戳,請在查詢中進行。

這將創建的目標表中帶有一列(字符串):

SELECT x FROM (SELECT "1" x) 

這將創建的目標表中有一列(整數):

SELECT INTEGER(x) AS x FROM (SELECT "1" x) 

這將創建的目標表帶有一列(時間戳):

SELECT TIMESTAMP(x) AS x FROM (SELECT "2015-10-21 04:29:00" x) 
2

爲了設置destinat的字段類型因爲結果集描述了目標表中的新字段類型,所以需要將CAST轉換爲查詢中的新類型。

  1. 你需要使用簡單的CAST函數來使用數字/日期。

SELECT TIMESTAMP(t)作爲噸FROM(SELECT 「2015年1月1日00:00:00」 噸)

  • 最近它是引入了記錄類型的「unflatten」功能,因此您現在可以在保留RECORD結構的同時將整個記錄傳輸到另一個表 - 爲此,您需要設置目標表(以及所需的寫入處置),將allowLargeResults = TRUE ,然後設置Flatten Results = FALSE(請參閱here中的最後一篇文章)。然後你可以運行這樣的查詢到整個記錄傳送到DEST表:
  • 選擇單元格* FROM publicdata:samples.trigrams下限0。

    我正在使用來自publicdata:樣本數據集的表也可用於您,因此您也可以運行這些測試。在上面的查詢中,'cell'是一個記錄,如果你設置了Flatten Results = FALSE,你會發現'cell'在你的dest表中仍然是一個RECORD。

    1. 將數據傳輸到dest表時,可以從記錄中刪除一些字段。下面是一個說明這個查詢(同樣,你需要用拼合結果運行= FALSE):

    SELECT cell.value,cell.volume_count FROM publicdata:樣品。trigrams LIMIT 0;

    運行上述查詢後,「單元格」記錄將只包含您指定的字段。

  • 可以傳送數據時向DEST表記錄中重命名現有字段:
  • SELECT cell.value AS cell.newvalue FROM publicdata:樣品.trigrams LIMIT 0;

  • 不幸的是,目前還沒有辦法將字段添加到記錄,例如,下面的查詢都將「actor_attributes」之外創建「URL」和「庫」記錄。
  • SELECT
    actor_attributes.blog,
    repository.created_at,
    repository.url AS actor_attributes.url
    FROM publicdata:samples.github_nested
    LIMIT 0;

    因此,爲了在記錄中添加一個字段,您需要導出數據,在BigQuery之外處理數據,然後使用新模式加載它。

    相關問題