使用更改历史记录
通过 BigQuery 更改历史记录,您可以跟踪 BigQuery 表的更改历史记录。 您可以使用 GoogleSQL 函数查看指定时间范围内所做的特定类型的更改,以便处理对表所做的增量更改。了解对表进行了哪些更改可帮助您在 BigQuery 外部执行逐步维护表副本等操作,同时避免费用高昂的副本。
所需权限
如需查看某个表的更改历史记录,您需要拥有该表的 bigquery.tables.getData 权限。以下预定义的 Identity and Access Management (IAM) 角色包含此权限:
roles/bigquery.dataViewerroles/bigquery.dataEditorroles/bigquery.dataOwnerroles/bigquery.admin
如果表具有或以前具有行级访问权限政策,则只有表管理员可以访问表的历史数据。表需要 bigquery.rowAccessPolicies.overrideTimeTravelRestrictions 权限,它包含在预定义的 roles/bigquery.admin IAM 角色中。
如果表具有列级安全性,则您只能查看您有权访问的列的更改历史记录。
更改历史记录函数
您可以使用以下函数来了解表的更改历史记录:
APPENDS:返回给定时间范围内附加到表的所有行。以下操作会将行添加到
APPENDS更改历史记录中:CREATE TABLEDDL 语句INSERTDML 语句- 作为
MERGEDML 语句的一部分附加的数据 - 加载数据到 BigQuery 中
- 流式提取
CHANGES:返回给定时间范围内表中所有已更改的行。如需对表使用CHANGES函数,您必须将表的enable_change_history选项设置为TRUE。以下操作会将行添加到
CHANGES更改历史记录中:CREATE TABLEDDL 语句INSERTDML 语句- 作为
MERGEDML 语句的一部分附加或更改的数据 UPDATEDML 语句DELETEDML 语句- 加载数据到 BigQuery 中
- 流式提取
TRUNCATE TABLEDML 语句- 配置了
writeDisposition为WRITE_TRUNCATE的作业 - 单独的表分区删除
价格和费用
调用更改历史记录函数会产生 BigQuery 计算费用。
APPENDS 和 CHANGES 函数都需要处理写入指定时间范围内的表中的所有数据。此处理适用于所有写入操作,包括附加和变更操作。
将表的 enable_change_history 选项设置为 FALSE 不会减少 APPENDS 处理的数据量。
如果您将表的 enable_change_history 选项设置为 TRUE 以使用 CHANGES 函数,则 BigQuery 会存储表更改元数据。存储的这些元数据会产生额外的 BigQuery 存储费用和 BigQuery 计算费用。
账单金额取决于对表所做的更改的数量和类型,通常很小。包含许多更改操作(尤其是大量删除操作)的表最有可能产生明显的费用。