0
from google.cloud import bigquery as bq 
import google_auth_oauthlib.flow 

query = '''select ... from ...''' 

bigquery_client = bq.Client() 
table = bq.query.QueryResults(query=query,client=bigquery_client) 
table.use_legacy_sql = False 
table.run() 

# transfer bigquery data to pandas dataframe 
columns=[field.name for field in table.schema] 
rows = table.fetch_data() 
data = [] 
for row in rows: 
    data.append(row) 

df = pd.DataFrame(data=data[0],columns=columns) 

私は1000万以上の行をPythonにロードしたいが、数週間前にうまくいきましたが、現在は10万行しか返しません。誰でもこれを行うための信頼できる方法を知っていますか?bigqueryからpythonに大きなデータをロード

+0

私もasync_query.pyを試して、rows = query_job.results()。fetch_data(max_results = 1000000)で試しました。しかし、彼らはどこかに100,000限界の上限を置いているようだ。キャップを上書きする方法はありますか?またはより効率的なpython計算にbigqueryを実行する方法。 – vortex

+0

WebUIまたはCLIでこのクエリを実行して、期待する合計行が返されているかどうかを確認してください。 –

+0

私は自分のCLIで実行しましたが、行はわずか100,000です。したがって、カットオフはtable.run()またはtable.fetch_data()のいずれかになります。 – vortex

答えて

0

は、私はここにこのコードをテストしていないキャップで3万行が適用されて持って来ることができる:

import os 
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/key.json' 

from google.cloud.bigquery import Client 

bc = Client() 
query = 'your query' 

job = bc.run_sync_query(query) 
job.use_legacy_sql = False 
job.run() 

data = list(job.fetch_data()) 

が、それはあなたのために働くのか?

+0

問題なくコードを実行できます。しかし、len(data [0])はまだ100Kの項目を持つタプルのリストであり、data [1]は行数で3900万、data [2]は文字列です。これもあなたのデータ構造に似ていますか? – vortex

+0

ああそうです。古いバージョンのBQ Clientを使用しているようです。バージョン '0.26.0'の使用をお勧めします。 'from google.cloud.bigquery import __version __; print(__ version __)' –

+0

はい、そうです、バージョンは他のインストールに関連してダウングレードされている可能性があります。今ではテーブルを読み込むのに時間がかかります。多くのデータを扱う効率的​​なワークフローを見つける過程にあります。何か提案はありますか? – vortex

関連する問題