数据操纵语言

借助 BigQuery 数据操纵语言 (DML),您可以在 BigQuery 表格中更新、插入和删除数据。

执行 DML 语句的过程与执行 SELECT 语句的过程相同,但必须符合以下条件:

  • 必须使用标准 SQL。要启用标准 SQL,请参阅切换 SQL 方言
  • 不能指定目标表。例如,在网页界面中,必须将目标表设置为 No table selected

    显示未选择目标表的 BigQuery 网页界面屏幕截图

限制

  • 每个 DML 语句都会启动一个隐式事务,这表示在每个 DML 语句成功结束时,系统会自动提交该语句所做的更改。不支持多语句事务。
  • 只允许对表并发运行以下 DML 语句组合:

    • UPDATEINSERT
    • DELETEINSERT
    • INSERTINSERT

    否则,将取消其中一个 DML 语句。例如,如果同时对表执行两个 UPDATE 语句,则只有其中一个会成功。

  • 最近通过流式插入(使用 tabledata.insertall 方法)写入表的行不能使用 UPDATEDELETEMERGE 语句进行修改。最近的写入通常是指在最近 30 分钟内发生的写入。注意,表中的所有其他行仍可以使用 UPDATEDELETEMERGE 语句进行修改。

  • MERGE 语句不支持 when_clausesearch_conditionmerge_update_clausemerge_insert_clause 中的相关子查询。

  • 如果只有 INSERT 子句(可能有多个子句),则 MERGE 语句的行为类似于 INSERT 语句。只有 INSERTMERGE 语句可以与其他 DML 语句(INSERTUPDATEDELETEMERGE)并发运行。

    如果 MERGE 语句不限于 INSERT 子句(含一个或多个 UPDATEDELETE 子句),则该语句无法与包含 UPDATEDELETE 子句的其他 MERGE 语句并发运行。该语句也无法与任何其他 DELETEUPDATE 语句并发运行。

  • 包含数据操纵语言 (DML) 语句的查询不能将通配符表用作查询的目标。例如,可以在 UPDATE 查询的 FROM 子句中使用通配符表,但不能将通配符表用作 UPDATE 操作的目标。

配额

如需了解 DML 配额信息,请参阅配额和限制页面中的 DML 语句

价格

如需了解 DML 价格,请参阅“价格”页面中的数据操纵语言价格

后续步骤

  • 请参阅 DML 语法页面中的 DML 语法和示例。