2016-09-10 12 views

答えて

1

先のテーブルにクエリの結果を書き込み、ページングされた方法で、そのテーブルからデータを取得するためにTabledata: list APIを使用するか取得するために、ページまたはmaxResultsstartIndexしてページを取得するためにmaxResultspageTokenを使用することであろう1つのオプションは、指定された行のセット。それでもとしてグループ化するための新しいnumフィールドを使用して、そのテーブルからデータを取得し、その後、宛先の一時テーブルに結果を書き込み、と

があなたのクエリにROW_NUMBERを追加することです別のオプション(下記のようなもの)

SELECT visitorId , totals.visits, 
    ROW_NUMBER() OVER() as num 
FROM [12123333.ga_sessions_20160602] 

例えばnum % 10000 = {group_number}である。それとも、INTEGER(num/10000) = {group_number}を使用することができます - あなたが好きな、より

SELECT visitorId , totals.visits 
FROM tempTable 
WHERE num % 10000 = 0 

に注意してください...ように

WHERE num % 10000 = 1 

ととなります次: 第二の選択肢は賢明な高価(実行を使用しています - 課金が賢明でない)各ノードのすべてのデータを必要とするROW_NUMBER()関数(この場合は1つのパーティションのみ - すべての行)が同じノードに存在するようになります。仕事かどうか。 500K行の特定の例では、何百万行と何百万行のテーブルに拡張すればよいのでしょうか?注:
- 最初のオプションでは、結果を生成して一時テーブルに保存するときに一度だけ支払います。それから、Tabledata.list APIはBigQueryクエリ自体を使用せず、基本データから直接読み込むので、自由に使用できます。
- 2つ目のオプションでは、すべてのBigQueryクエリであるため、テンポラリテーブルを取得/照会するたびに、別のグループを取得します。さらに、特定のグループのデータを取得するたびに、全テンポラリテーブルをスキャンするたびに課金されます。その場合は50倍になります。

これにより、2番目のものより約51倍安い)

1

あなたは次のクエリを使用することができ ページ・サイズが10 000でデータページネーション、求めているように聞こえる

SELECT visitorId, totals.visits, 
FROM (
    SELECT visitorId , totals.visits, ROW_NUMBER() OVER() as rownum 
    FROM [12123333.ga_sessions_20160602]' 
) WHERE rownum BETWEEN 1 AND 10000 

など

SELECT visitorId, totals.visits, 
FROM (
    SELECT visitorId , totals.visits, ROW_NUMBER() OVER() as rownum 
    FROM [12123333.ga_sessions_20160602]' 
) WHERE rownum BETWEEN 10001 AND 20000 
関連する問題