私はbigquery 'SELECT visitorId , totals.visits FROM [12123333.ga_sessions_20160602]'
を持っており、1回のリクエストで500k行を返します。リクエストごとにbigqueryレスポンスを10000に分割する方法は?
しかし、1回のリクエストで1〜10,000行のデータを断片化し、次のリクエストでは次の10,001〜20,000がフェッチされます。
ありがとうございます。
私はbigquery 'SELECT visitorId , totals.visits FROM [12123333.ga_sessions_20160602]'
を持っており、1回のリクエストで500k行を返します。リクエストごとにbigqueryレスポンスを10000に分割する方法は?
しかし、1回のリクエストで1〜10,000行のデータを断片化し、次のリクエストでは次の10,001〜20,000がフェッチされます。
ありがとうございます。
先のテーブルにクエリの結果を書き込み、ページングされた方法で、そのテーブルからデータを取得するためにTabledata: list APIを使用するか取得するために、ページまたはmaxResults
とstartIndex
してページを取得するためにmaxResults
とpageToken
を使用することであろう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倍安い)
あなたは次のクエリを使用することができ ページ・サイズが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