【问题标题】:google-bigquery Does Bigquery support single DML(insert, update, delete) SQ statement rollback?google-bigquery Bigquery 是否支持单个 DML(插入、更新、删除)SQ 语句回滚?
【发布时间】:2021-07-13 21:52:21
【问题描述】:

Bigquery 是否支持单个 DML(插入、更新、删除)SQL 语句回滚?

换句话说,是否有一个选项可以让单个 DML 语句成为一个自动提交事务,并在失败时支持回滚?

感谢您提前回复。 史蒂夫。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    BigQuery 中有一项新功能支持多语句事务时的回滚。看看official docs。它还没有在 GA 中。

    BigQuery 支持脚本内的多语句事务。多语句事务允许您在一个或多个表上执行变异操作,例如插入或删除行,并以原子方式提交或回滚更改。

    多语句交易的用途包括:

    • 在多个表上作为单个事务执行 DML 突变。这些表可以跨越多个数据集或项目。
    • 根据中间计算分几个阶段对单个表执行突变。

    事务保证 ACID 属性并支持快照隔离。在事务期间,所有读取都会返回事务中引用的表的一致快照。如果事务中的语句修改了表,则更改对同一事务中的后续语句可见。

    在只有一个 DML 语句的情况下,BigQuery 也是 ACID 投诉。这是记录在here

    如果更新失败,您将不会更新 X 行。

    【讨论】:

    • 感谢您的回答。但我的问题是关于单个 DML 语句(不是多语句事务)。我认为它支持基于此文档页面:cloud.google.com/bigquery/docs/reference/standard-sql/…
    • 感谢您的澄清。我刚刚编辑了我的答案。
    • 您好 Alvaro,1. 单个 SQL 语句事务是否依赖于存储类型?换句话说,所有存储类型都支持事务,如 Cloud Storage 或 Google Drive 或 Bigtable 或 Cloud SQL?他们是否支持 Cloud Storage 上的表事务(我的情况是这样)? 2. 无论存储引擎类型如何,它们是否支持 BigQuery 中 DDL 语句(CREATE、DROP、ALTER)的事务?提前感谢您的友好回答。
    • 我不完全理解你的疑惑。当您使用 Drive、BigTable、GCS 等时,您正在修改那里的数据。您正在使用这些作为外部资源。当您尝试在外部源中写入数据时,您将收到以下错误消息:“.....is not allowed for this operation because it current is a EXTERNAL”
    • 很抱歉没有让你明白。 1. 当我说我在使用 Cloud Storage 时,我只是认为 BigQuery 将其用作内部存储(存储引擎)之一。但这似乎不正确。我想到了 MySQL 存储类型模型,例如具有多个存储引擎的查询引擎,具有通用接口。
    猜你喜欢
    • 2016-12-19
    • 2020-10-12
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多