如何在 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】:目前无法延长恢复期的持续时间。正如 Katayoon 评论的那样,已经创建了延长恢复期持续时间的功能请求。
这里是监控该问题进展的公共链接: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 创建数据存储备份表