2013-06-05 9 views
6

GoogleのBigQueryダッシュボードと似たようなものを作成しようとしていますが、あらかじめ定義されたクエリ/ビューを除いています。私が実行している問題は、データの改ページです。ページのBigQuery

tabledata endpointはあなたが私はこのような何かをすることができ、ページのトークンを開始インデックスを指定するか、使用することができるという点で改ページをサポートしています。

query_reply = table_data_job.list(projectId=settings.PROJECT_ID, 
            datasetId=settings.DATASET_ID, 
            tableId=table, 
            startIndex=offset, 
            maxResults=page_size).execute() 
これに伴う問題は、私は特定のクエリを実行したいということです

(または、少なくとも、テーブルデータの結果を順序付ける)。

query_data = {'query': 'SELECT * FROM my_dataset.foo_table LIMIT %s' % page_size} 
query_reply = job_collection.query(projectId=settings.PROJECT_ID, 
            body=query_data).execute() 

私の知る限り、上記のコードでオフセットを行う方法はありません。これはBigQueryが適していないものですか?私は代わりに、メモリ内のページ分割を行い、より小さな結果セットを処理することになると思いますか?

答えて

5

BigQueryのクエリ結果はテーブルです。したがって、クエリを実行して結果から宛先テーブルを取得し、tabledata.list()APIを使用して結果をページすることができます。代わりに、返信からジョブIDを取得し、jobs.getQueryResults()を使用することができます。これにページ分割のサポートがあります。

1

あなたが唯一のROW_NUMBER()ここで

を使用して、SQLで改ページを達成することができますが、一般的なテンプレートにある

SELECT t.* 
FROM (
SELECT 
1 AS one, 
[field], 
ROW_NUMBER() OVER(PARTITION BY one) AS rownum 
FROM [table]) t WHERE rownum BETWEEN X AND Y