当前位置: 首页 > 知识库问答 >
问题:

BigQuery:此表的dml插入操作太多

司寇研
2023-03-14

我正试图通过Python客户端将不同计算机(n=20)上的2亿多条记录导入我的BigQuery表。每台计算机每10分钟运行一次。第二个作业(具有多行)

from google.cloud import bigquery
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + '/api.json'

print('Import job started, total rows:' + str(len(queries)))
client = bigquery.Client()
for q in queries:
    results = client.query(q)
    for err in results:
        print(err)

但我得到了以下错误:

google.api_core.exceptions.禁止: 403超出速率限制:此表的表dml插入操作太多。有关详细信息,请参阅https://cloud.google.com/bigquery/troubleshooting-errors

正在运行时生成数据。所以我必须在运行时导入数据。我也不确定BigQuery是否适合这样做。扳手似乎更好,但它花了我太多的钱。

如何避免这个错误?非常感谢你。

共有1个答案

空慈
2023-03-14

有4种将数据插入到BigQuery表中的主要方法。

  1. 批量加载一组数据记录。
  2. 串流单个记录或批量记录。
  3. 使用查询生成新数据,并将结果追加或覆盖到表中。
  4. 使用第三方应用程序或服务。

我认为您正在使用第三个选项,即DML INSERT。它不是为大规模高频数据加载用例设计的。

在您的用例中,第二个选项,流式数据,似乎是一个很好的选择。

实例

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of table to append to.
# table_id = "your-project.your_dataset.your_table"

rows_to_insert = [
    {u"full_name": u"Phred Phlyntstone", u"age": 32},
    {u"full_name": u"Wylma Phlyntstone", u"age": 29},
]

errors = client.insert_rows_json(table_id, rows_to_insert)  # Make an API request.
if errors == []:
    print("New rows have been added.")
else:
    print("Encountered errors while inserting rows: {}".format(errors))

你可以在这里看到更多细节。https://cloud.google.com/bigquery/streaming-data-into-bigquery

 类似资料:
  • 就像已经讨论的那样,自动和透明的对象/关系映射(object/relational mapping)关注于管理对象的状态。这就意味着对象的状态存在于内存,因此直接操作(使用 SQL Data Manipulation Language(DML,数据操作语言)语句 :INSERT ,UPDATE 和 DELETE) 数据库中的数据将不会影响内存中的对象状态和对象数据。不过,Hibernate 提供通

  • 一、加载文件数据到表 1.1 语法 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] LOCAL 关键字代表从本地文件系统加载文件,省略则代表从 HDFS 上加载文件: 从本地文件系统加载文件时, filepath

  • 资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分别介绍他们的语法。 1.增加资料: INSERT INTO table_name (column1,column2,...) values ( value1,value2, ...) 说明: 若没有指定 column 系统则会

  • 当您想要将记录创建到数据库表中时,它是必需的。 以下示例将在employee表中插入记录。 例子 (Example) /* Main program */ Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs' Call SQLLoadFuncs if SQLConnect(c1,'testuser','test123','testd

  • 作为测试的一部分,我一直在尝试创建一个用户,然后将其删除,但我不断收到相同的错误组织。冬眠hql。内部的QueryExecutionRequestException:即使在我的存储库和控制器中不断更改代码之后,DML操作也不受支持。 这是我的存储库中的代码: 这是我的控制器中的代码:

  • 我正在尝试更新数据库中的记录,但收到此错误 这是我的hql尝试 经过研究,我在方法的顶部添加了@修改注释,但错误仍然存在。请问怎么了?