我正在開發一個管理系統的web應用程序。
在其中一頁上,客戶端顯示一些彙總值的報告。 客戶報告具有分頁,排序和過濾。
服務器端用Go編寫,數據存儲在BigQuery中的大型數據集中(每個表格爲一天)。服務器代碼使用庫「google.golang.org/api/bigquery/v2」與BQ進行通信。
實施
由於主查詢需要花費大量的時間,我用的是Query API來運行查詢並緩存的JobID後續調用。
query := &bigquery.QueryRequest{
DefaultDataset: "myDataSet",
Kind: "json",
Query: queryStr,
UseQueryCache: true,
}
qr, err := service.Jobs.Query(project, query).Do()
// cache the job id
key := getMD5Hash(queryStr)
item := &memcache.Item{
Key: key,
Value: []byte(qr.JobReference.JobId),
Expiration: time.Hour * 24,
}
err := memcache.Set(c.ctx, item)
然後我使用緩存的jobID,然後使用getQueryResults來獲取數據的頁面。
qrc := service.Jobs.GetQueryResults(project, jobId)
if maxResults > 0 {
qrc.MaxResults(int64(maxResults))
}
qrc.StartIndex(uint64(startIndex))
qrslice, err := qrc.Do()
問題
我想過濾和排序的數據,但不重複的底層(重)查詢。是否可以在由原始查詢創建的臨時表上運行另一個查詢?
這意味着如果我的原始表是A並且我對它運行了一個查詢,則會生成一個臨時表TEMP_JOB;有可能在TEMP_JOB上執行SQL查詢嗎?
這正是我最終做的 - 謝謝! – Lizozom