【问题标题】:How to order and read from a very large bigquery table line by line in Python?如何在 Python 中逐行从一个非常大的 bigquery 表中排序和读取?
【发布时间】:2022-06-14 14:07:24
【问题描述】:

这是我用来在 python 中逐行读取大型 bigquery 表的一段代码:

client = bigquery.Client('YOUR_CLIENT_NAME'); 
conn = dbapi.connect(client);
cursor = conn.cursor();
cursor.execute('SELECT * FROM MY_LARGE_TABLE ORDER BY COLUMN_A');
line = cursor.fetchone();
while line != None:
      print('Do something with line')
      line = cursor.fetchone();

这适用于某些表格。但是,对于非常大的表,它会显示以下错误:

google.cloud.bigquery.dbapi.exceptions.DatabaseError: 403 Response too large to return. Consider specifying a destination table in your job configuration. For more details, see https://cloud.google.com/bigquery/troubleshooting-errors

基本上,我在 CGP 上有一个很大的表 MY_LARGE_TABLE。该表中有一个列COLUMN_A。我需要遍历表(在 python 中)并提取具有相同COLUMN_A 的所有记录并对这些记录进行一些分析,并对所有唯一的COLUMN_A 值重复此操作。我的计划是(参见上面的python脚本)在我的查询中使用ORDER BY COLUMN_A,以便cursor.execute()返回的结果是有序的,并且具有相同COLUMN_A的所有记录彼此相邻,我可以遍历使用fetchone() 的表格并一次性完成任务。

【问题讨论】:

  • 错误消息显示:“考虑在作业配置中指定目标表。有关更多详细信息,请参阅cloud.google.com/bigquery/troubleshooting-errors” - 你这样做了吗?
  • 谢谢。我知道如何在 GCP 上做到这一点,但不确定如何在 python 中做到这一点。我想我需要用python来做吗?另外,cursor.fetchone() 不是应该逐行阅读吗?
  • 谷歌文档中有一个例子:Paging through query results
  • query_job.result() 时给我同样的错误。
  • 您可以尝试通过将google.cloud.bigquery.job.QueryJobConfig 对象传递给execute()job_config 参数来指定错误消息所建议的目标表吗?您的 execute() 应如下所示:curr.execute(query,job_config=QueryJobConfig(destination="your_project.your_dataset.your_dest_table"))

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


【解决方案1】:

正如@khemedi 所证实的,提供错误建议的目标表可以解决问题。请参阅关于在执行时添加目标表的代码 sn-p。

curr.execute(query,job_config=QueryJobConfig(destination="your_project.your_dataset.your_dest_table"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2021-11-29
    • 2011-08-01
    相关资源
    最近更新 更多