2017-01-19 31 views
2

BigQueryテーブル(> 5mil以上)があります。Pythonで大きなBigQueryテーブルからデータを取得する

このデータをバッチで取得し、AppEngine、pythonで処理する必要があります。

私が知っているテーブルからフェッチする唯一の方法は、このテーブルに対してSELECTクエリを実行し、次にトークンfetch_dataが返す結果を反復することです。

それは次のようになります。

query = u"""\ 
    SELECT url FROM %s 
    """ % (query_table) 

query_job = client.run_async_query(str(uuid.uuid4()), query) 

query_job.begin() 

wait_for_job(query_job, 1) 

query_results = query_job.results() 

rows, total_rows, next_token = query_results.fetch_data(max_results=per_page, page_token=page_token) 

これは、小さなテーブルの上に動作しますが、私のような大規模なもので、それは大きな要求を許可し、ターゲット表を指定することが求められます。しかし、これは私には意味がありません。単にテーブルからデータをフェッチするには、別のテーブルにコピーする必要がありますか?

答えて

0

テーブルからデータを取得するには、tabledata.list APIを使用する必要があります。
parameters(startIndexまたはpageToken)とmaxResultsを使用すると、フェッチするページのサイズを制御できます。

1

実行している内容は、this documentationに記載されています。要約すると、一度にどれくらいのデータを取り出すことができるかという制限は別として、結果が「大きな結果」になる点があります。これは、結果がhereと記述されているように圧縮された128MBを超える場合です。結果が大きいと分類された場合は、クエリの結果をBig Queryのテーブルにのみ格納できます。

残念ながら、一度に取得する行の数を減らさずに、必要な処理を行うには良い方法があるとは思いません。あなたがしなければならないことは、大きなクエリのためにexporting data documentationを探索することです。

0

これはまさにあなたがlinkを必要としていると思っています。私はあなたがクエリの大きな結果を得ることができないと理解していますが、あなたはテーブルに大きな結果を入れて、あなたのアプリにこのテーブルのデータを取得し、あなたがそれを望むようにする必要があります

幸運:

関連する問題