這裏的主要問題是具有每一天全掃描。剩下的問題就更少了,並且可以很容易地被編寫出來。client of your choice
所以,下面是 - 如何避免每一天的全表掃描?
嘗試下面的步驟一步看方法
它是通用的,足以擴展/應用到你的實際情況 - 同時我使用同樣的例子,你在你的問題,我限制的運動,只是10天
1步 - 創建透視表
在這一步中,我們一)壓縮每一行的內容到記錄/陣列和b)把他們全部納入各自的「日報」列
#standardSQL
SELECT
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160101' THEN r END) AS day20160101,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160102' THEN r END) AS day20160102,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160103' THEN r END) AS day20160103,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160104' THEN r END) AS day20160104,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160105' THEN r END) AS day20160105,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160106' THEN r END) AS day20160106,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160107' THEN r END) AS day20160107,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160108' THEN r END) AS day20160108,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160109' THEN r END) AS day20160109,
ARRAY_CONCAT_AGG(CASE WHEN d = 'day20160110' THEN r END) AS day20160110
FROM (
SELECT d, r, ROW_NUMBER() OVER(PARTITION BY d) AS line
FROM (
SELECT
stn, CONCAT('day', year, mo, da) AS d, ARRAY_AGG(t) AS r
FROM `bigquery-public-data.noaa_gsod.gsod2016` AS t
GROUP BY stn, d
)
)
GROUP BY line
在web用戶界面中使用pivot_table運行以上查詢(您可以選擇任意名稱)作爲目標
正如您所看到的 - 在此處我們將獲得包含10列的表 - 每列一列,每個模式列是原始表中的模式的副本:
步驟2 - 創建分片表一個接一個ONLY掃描各自的列(沒有全表掃描)上述曲
#standardSQL
SELECT r.*
FROM pivot_table, UNNEST(day20160101) AS r
潤從目標表中的Web UI紅黴素命名mytable_20160101
您可以第二天運行相同
#standardSQL
SELECT r.*
FROM pivot_table, UNNEST(day20160102) AS r
現在你應該有目的地表命名mytable_20160102等
你應該能夠自動/腳本這一步與您選擇的任何客戶端 注意:那些最終的日常表格將與原始表格具有完全相同的架構!
有如何,您可以使用上面的方法很多變化 - 它是由你的創造力
注:的BigQuery允許多達10000列在表中,因此365列了一年的各天絕對不是問題在這裏:o)
@ daniel-barron - 如果答案幫助了你,你接受了它 - 請考慮投票。 '。投票答案即使已被接受或將被接受也是有幫助的。還有更多......當某人回答你的問題時,你可以查看該怎麼做 - http://stackoverflow.com/help/someone-answers。 –