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,它在几个星期前工作正常,但现在它只返回100,000行。任何人都知道可靠的方法来做到这一点?从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客户端。我建议使用'0.26.0'版本。您可以通过运行来查看您使用的是哪个版本:'from google.cloud.bigquery import __version __; print(__ version __)' –

+0

是的,您说得对,该版本可能与其他安装相关的降级。现在需要很长时间才能加载表格。我正在寻找处理大量数据的高效工作流程。你有什么建议吗? – vortex

相关问题