2017-07-31 20 views
1

私はPython Client Libraries for the Google BigQuery API次てる>照会データ(非同期) - https://googlecloudplatform.github.io/google-cloud-python/stable/bigquery/usage.html#jobs>照会データ(非同期)GoogleのBigQueryのAPI(Pythonクライアントライブラリ)

それがコードを実行し、結果を取得するために来る

rows, total_count, token = query.fetch_data() # API requet 

常に、しかし目をValueError: too many values to unpack (expected 3) (ところで、私はタイプミスがあると思う、それは代わりにresults.fetch_data()する必要があります!)

を返しますコード次の電子は、テーブルのすべての行は、シンゲルショットでTBLに(タプルのリストなど)のリターンです

results = job.results() 
rows = results.fetch_data() 
tbl = [x for x in rows] 

正常に動作します> 225K行!

エラーが表示される理由は何ですか?また、ドキュメントに何か間違いがありますか?

どのように私はまだバッチで結果を取得することができます(ページ単位を反復)事前に

おかげでたくさん!

答えて

1

私はthis issueを開いてドキュメントを更新していましたが、回答からわかるように、変更するには公式リリースが必要です。

より良いドキュメンテーション文字列(この場合は特にクラスイテレータ)のためcode base自身を参照してください:

"""Iterators for paging through API responses. 
These iterators simplify the process of paging through API responses 
where the response is a list of results with a ``nextPageToken``. 
To make an iterator work, you'll need to provide a way to convert a JSON 
item returned from the API into the object of your choice (via 
``item_to_value``). You also may need to specify a custom ``items_key`` so 
that a given response (containing a page of results) can be parsed into an 
iterable page of the actual objects you want. You then can use this to get 
**all** the results from a resource:: 
    >>> def item_to_value(iterator, item): 
    ...  my_item = MyItemClass(iterator.client, other_arg=True) 
    ...  my_item._set_properties(item) 
    ...  return my_item 
    ... 
    >>> iterator = Iterator(..., items_key='blocks', 
    ...      item_to_value=item_to_value) 
    >>> list(iterator) # Convert to a list (consumes all values). 
Or you can walk your way through items and call off the search early if 
you find what you're looking for (resulting in possibly fewer 
requests):: 
    >>> for my_item in Iterator(...): 
    ...  print(my_item.name) 
    ...  if not my_item.is_valid: 
    ...   break 
At any point, you may check the number of items consumed by referencing the 
``num_results`` property of the iterator:: 
    >>> my_iterator = Iterator(...) 
    >>> for my_item in my_iterator: 
    ...  if my_iterator.num_results >= 10: 
    ...   break 
When iterating, not every new item will send a request to the server. 
To iterate based on each page of items (where a page corresponds to 
a request):: 
    >>> iterator = Iterator(...) 
    >>> for page in iterator.pages: 
    ...  print('=' * 20) 
    ...  print(' Page number: %d' % (iterator.page_number,)) 
    ...  print(' Items in page: %d' % (page.num_items,)) 
    ...  print('  First item: %r' % (next(page),)) 
    ...  print('Items remaining: %d' % (page.remaining,)) 
    ...  print('Next page token: %s' % (iterator.next_page_token,)) 
    ==================== 
     Page number: 1 
     Items in page: 1 
     First item: <MyItemClass at 0x7f1d3cccf690> 
    Items remaining: 0 
    Next page token: eav1OzQB0OM8rLdGXOEsyQWSG 
    ==================== 
     Page number: 2 
     Items in page: 19 
     First item: <MyItemClass at 0x7f1d3cccffd0> 
    Items remaining: 18 
    Next page token: None 
To consume an entire page:: 
    >>> list(page) 
    [ 
     <MyItemClass at 0x7fd64a098ad0>, 
     <MyItemClass at 0x7fd64a098ed0>, 
     <MyItemClass at 0x7fd64a098e90>, 
    ] 
+0

おかげでたくさんの仲間を!これは本当に明確なもの:) –

0

はい、問題はありません。私たちは私たちの日常の仕事のデータをフェッチするために時間ごとのクエリを実行する大きなデータセットについて

results = job.results()

rows, total_count, token = query.fetch_data() # API requet

while True:

do_something_with(rows) 

    if token is None: 

      break 

    rows, total_count,token=query.fetch_data(page_token=token)  # API requeste here 

- タイプミスがあります。

関連する問題