如何在 BigQuery 中备份数据集?

Posted

技术标签:

【中文标题】如何在 BigQuery 中备份数据集?【英文标题】:How to take the backup of a dataset in BigQuery? 【发布时间】:2018-11-20 16:13:23 【问题描述】:

我们希望创建 BigQuery 数据集的备份副本,以防意外删除表,因为它只能恢复 within 7 days。

有没有办法延长恢复期的持续时间?如果没有,我们如何在 BigQuery 中创建保留期为 30 天的数据集备份?

【问题讨论】:

请注意,Cloud BigQuery 产品团队已经意识到您对此功能请求的兴趣,我建议您加注星标this ticket 以关注您的功能请求。 已编辑以强调此期限已延长至自原始问题发布以来的 7 天。 另外值得注意的是,功能请求被标记为“不会修复” 【参考方案1】:

目前无法延长恢复期的持续时间。正如 Katayoo​​n 评论的那样,已经创建了延长恢复期持续时间的功能请求。

这里是监控该问题进展的公共链接:https://issuetracker.google.com/120038872

要在 BigQuery 中备份数据集,您可以制作数据集的副本,或者作为更可行的解决方案,将数据导出到 Cloud Storage,以便稍后将其重新导入。 Cloud Storage 允许您设置保留期和生命周期策略,它们一起可以确保数据在所需的时间内保持不受干扰,并且如果您希望节省存储成本,它会在给定时间后自行删除。

关于如何在 BigQuery 中进行导出: 您可以通过 Web UI、命令行、API 并使用各种语言(如 C#、Go、Python 和 Java)将表格作为 AVRO、JSON 或 CSV 文件导出到云存储,只要两者位于同一位置即可。导出表还有其他限制,例如文件大小、整数编码、数据压缩等。 链接到表导出和限制: https://cloud.google.com/bigquery/docs/exporting-data

您可以在此处找到有关程序的说明: 保留策略和存储桶锁:https://cloud.google.com/storage/docs/using-bucket-lock#lock-bucket 对象生命周期管理: https://cloud.google.com/storage/docs/managing-lifecycles

可以使用各种文件格式将数据加载到 BigQuery 中,例如 CSV、JSON、Avro、Parquet 或 ORC 等。目前,您只能从本地存储或 Google 存储直接加载。有关加载数据、文件格式、数据源和限制的更多信息,请点击链接:https://cloud.google.com/bigquery/docs/loading-data

更多信息 导出表:https://cloud.google.com/bigquery/docs/exporting-data 导出限制:https://cloud.google.com/bigquery/docs/exporting-data#export_limitations 将数据加载到 BigQuery:https://cloud.google.com/bigquery/docs/loading-data 通配符:https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames 合并文件:https://cloud.google.com/storage/docs/gsutil/commands/compose

【讨论】:

【参考方案2】:

您可以使用https://github.com/GoogleCloudPlatform/bigquery-oreilly-book/tree/master/blogs/bigquery_backup中的工具进行备份和恢复:

将表备份到 GCS

./bq_backup.py --input dataset.tablename --output gs://BUCKET/backup

这会将 schema.json、tabledef.json 和 AVRO 格式的提取数据保存到 GCS。

您还可以备份数据集中的所有表:

./bq_backup.py --input dataset --output gs://BUCKET/backup

通过指定目标数据集逐一恢复表

./bq_restore.py --input gs://BUCKET/backup/fromdataset/fromtable --output destdataset

对于视图,备份存储视图定义,还原创建视图。

【讨论】:

【参考方案3】:

您可以使用 SQL 或 CLI 获取表的 snapshot:

SQL

CREATE SNAPSHOT TABLE
  myproject.library_backup.books
  CLONE myproject.library.books
  OPTIONS(expiration_timestamp = TIMESTAMP "2022-04-27 12:30:00.00-08:00")

命令行界面

bq cp --snapshot --no_clobber --expiration=86400 library.books library_backup.books

【讨论】:

以上是关于如何在 BigQuery 中备份数据集?的主要内容,如果未能解决你的问题,请参考以下文章

Python GAE - 如何以编程方式将数据从备份导出到 Big Query?

通过 BigQuery Java api 创建数据存储备份表

MySQL备份和恢复

将 10 个数据集(每个数据集有 80 个表)从 bigquery 导出到 google 存储的有效方法?

数据库备份和恢复---MariaDB

如何重命名 Big Query 中的列? [关闭]