谷歌云 BigQuery table snapshots 更快速、高效、低成本的恢复数据

错误是人性的一部分。谁没有过不小心没给车上锁或把一封本来打算保密的电子邮件回复给了所有人的时候?但是如果在操作企业数据仓库的时候出现错误(例如意外删除或修改数据),这可能会对您的业务产生重大影响。

在您使用任何一个数据集的时候,BigQuery time travel 都可以自动启动,让您快速访问过去七天的任何时间点的数据状态。不过这个功能用于恢复数据表的时候会有些棘手,因为需要您追踪“最后已知良好”的时间。此外,出于潜在的审计或法规需求,您可能希望在7天窗口期之后仍然保留(您的)数据状态。

Table snapshots可通过 BigQuery API、SQL、命令行界面或 Google Cloud Console 获得。让我们看一下 Cloud Console 中的一个简单示例。

首先,我们将创建一个新的数据集和 table 来测试 snapshot 功能:


接下来,打开属性页面(界面),在资源管理器窗口中选择新创建的表格。


虽然您可以使用 SQL 或 BigQuery 命令行工具创建 snapshot,但在本示例中,我们将使用 Cloud Console 工具栏中的 “snapshot” 按钮创建  inventory 表的 snapshot。

BigQuery 引入了一个新的 IAM 权限( bigquery.tables.createSnapshot ),除了现有的 bigquery.tables.get 和 bigquery.tables.getData 权限之外,该权限是基表所必需的。此新权限已添加到 bigQuery.dataViewer 和 bigQuery.dataEditor 任务中,但需要添加到您创建的任何自定义任务中。



您可以像处理常规表一样处理 Table snapshots ,只是您不能对它们进行任何修改(数据或模式)。如果您在与基表相同的数据集中创建 snapshot,则需要为其指定一个独有名称或使用推荐的名称,其会附加时间戳在 table 名称的末尾。


如果您想使用原始 table 名称作为 snapshot 名称,则需要在新数据集中创建它,这样就不会有命名冲突。例如,您可以编写一个脚本来创建一个新数据集并从源数据集中创建所有 tables 的 snapshot,同时保留它们的原始名称。请注意,当您在另一个数据集中创建 snapshot 时,它将继承目标数据集的安全配置,而不是源数据集。

您可以随意在 Expiration time 字段中输入一个值,并让 BigQuery 在该时间点自动删除 snapshot。您还可以随意在 snapshot time 字段中指定一个值,以在 time travel 窗口内从基表的历史版本中创建 snapshot。例如,您可以从 3 小时前的基表状态创建 snapshot。

对于这个例子,我将给它起名 inventory-snapshot 。单击 Save 几秒钟后,snapshot 就创建成功了,它将以不同的图标出现在资源管理器窗格的列表中。


此操作的等效 SQL 将是:


现在,让我们看一下 Cloud Console 中新 table snapshot 的属性页面。


除了常规 snapshot table 的信息之外,您还可以看到有关用于创建 snapshot 基表的信息,以及创建 snapshot 的日期和时间,即使基表被删除了也是如此。尽管 snapshot 的大小显示的是整个表的大小,但您只需要按照 snapshot 里保有的数据和当前基表里保有的数据间的差异大小付费(使用 BigQuery 的标准定价)。如果没有删除或更改基表中的数据,则 snapshot 不会产生额外费用。

由于 snapshot 是只读的,如果您尝试通过 DML 修改 snapshot table 数据或通过 DDL 更改 snapshot 的架构,则会出现错误。但是,您可以更改 snapshot 属性,例如描述、到期时间或标签。您还可以使用表访问 controls 来更改谁可以访问快照,就像任何其他表一样。

假设我们不小心从基表中删除了一些数据,您可以通过在 SQL 工作区中运行以下命令来模拟这一点。


您将看到基表现在只有 6 行,而 snapshot 的行数和大小没有改变。如果需要访问已删除的数据,可以直接查询 snapshot。例如,以下查询将显示 snapshot 仍有 7 行:


但是,如果要更新 snapshot 中的数据,则需要将其还原到可写表中。您可以点击 Cloud Console 中的恢复按钮。


默认情况下,snapshot 将恢复到新表中。但是,如果您想替换现有的表,您可以使用现有的表名并选中 Overwrite table if it exists 复选框。

此操作也可以使用 BigQuery API、SQL 或 CLI 执行。此操作的等效 SQL 将是:



WebEye是中国大陆地区首家获得 Google Cloud MSP 资质的合作伙伴。WebEye致力于用创新的技术向中国企业提供数字化效率创新服务,实现数字化赋能。我们不断帮助客户打造新的运营与协作方式,打造新的竞争优势,构建资源高效链接,共创价值生长空间。

WebEye整合全球资源,打造全球数字化营销体系,为企业提供营销增长服务营销增长引擎以及企业上云三大板块业务,涵盖数字营销、数字创意、游戏发行、流量变现、程序化广告、数据洞察、云计算等一站式全链条增长产品矩阵,是中国互联网出海领军企业。

返回全部