【问题标题】:load large data from bigquery to python将大数据从 bigquery 加载到 python
【发布时间】:2023-03-26 19:21:01
【问题描述】:
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 行。有人知道这样做的可靠方法吗?

【问题讨论】:

  • 我也尝试了 async_query.py,并使用 rows = query_job.results().fetch_data(max_results=1000000)。但似乎他们在某个地方设置了 100,000 的上限。有没有办法覆盖上限?或更有效的方式来执行大查询到 python 计算。
  • 只是想知道,您是否在 WebUI 或 CLI 中运行此查询以查看它是否返回您期望的总行数?
  • 我在 CLI 中运行过,行数只有 100,000。所以截止点可能在 table.run() 或 table.fetch_data()。
  • 如果 CLI 也返回 100k,那么看起来这实际上就是您的表中的所有内容。看起来问题出在您的表格中,而不是在带来数据时达到某个阈值。
  • 我在 UI 中运行了相同的查询,它返回超过 3900 万。但是使用 python 程序,更难诊断截止发生的位置。

标签: python google-bigquery google-cloud-platform google-python-api


【解决方案1】:

我刚刚在这里测试了这段代码,可以带来 300 万行且不应用上限:

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())

它对你有用吗?

【讨论】:

  • 我可以毫无问题地运行您的代码。但是 len(data[0]) 仍然是一个包含 100K 项的元组列表,data[1] 是行数,即 3900 万,data[2] 是一个字符串。这也是你的数据结构的样子吗?
  • 啊,我明白了。看起来您使用的是旧版本的 BQ 客户端。我推荐使用版本0.26.0。你可以通过运行查看你正在使用的版本:from google.cloud.bigquery import __version__;print(__version__)
  • 是的,你是对的,版本可能降级与其他安装有关。现在加载表格需要很长时间。我正在寻找一个处理大量数据的有效工作流程。你有什么建议吗?
  • 是的,将 4000 万行添加到单个实例中非常昂贵。这真的取决于你想做什么。我建议尝试使用在apache beam 中实现的数据流或使用一些集群来运行您的分析,例如dataproc。最后,我有一个与主集群集成的 jupyter,发现它对于日常数据分析非常有用。
  • 能否请您给我更多关于您的 jupyter 工作流程的实施细节?你用datalab吗?大数据交互,是否搭建集群,直接将bigquery数据引入内存?任何文档链接将不胜感激!
猜你喜欢
  • 2014-07-09
  • 2019-07-28
  • 2018-12-04
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 2018-09-02
相关资源
最近更新 更多