背景BigQuery - クエリに対してクエリを実行できますか?
私は管理システムWebアプリケーションを開発しています。
ページの1つで、クライアントはいくつかの集計値のレポートを表示します。 クライアントレポートには、ページ番号、ソート、およびフィルタリングがあります。
サーバー側はGoで書かれ、データはBigQueryの大きなデータセットに格納されます(各テーブルは1日分です)。サーバーコードは、ライブラリ "google.golang.org/api/bigquery/v2"を使用してBQと通信します。
実装
メイン・クエリは、私は、クエリを実行し、以降の呼び出しのためのジョブIDをキャッシュするQuery APIを使用して、多くの時間がかかるため。
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)
その後、私は、キャッシュされたジョブIDを使用して、データのページを取得するために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