【发布时间】: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