将 10 个数据集(每个数据集有 80 个表)从 bigquery 导出到 google 存储的有效方法?
Posted
技术标签:
【中文标题】将 10 个数据集(每个数据集有 80 个表)从 bigquery 导出到 google 存储的有效方法?【英文标题】:An efficient way of exporting 10 datasets (each having 80 tables) from bigquery to google storage? 【发布时间】:2017-03-21 11:56:22 【问题描述】:我在 BigQuery 中有 10 个数据集,每个数据集有 80 个表。我知道我可以使用控制台或 Web UI 将每个数据集中的每个表一一导出到谷歌存储。这是出于备份目的。但是,这需要一段时间。
我想知道是否有更方便的方法来处理这个问题?
【问题讨论】:
【参考方案1】:您可以使用bq
命令行工具 (https://cloud.google.com/bigquery/bq-command-line-tool) 完成此操作
以下代码将帮助您实现相同的目标:
project="bigquery-project"
dataset="your-dataset"
bucket="your-bucket"
# get list of tables
tables=$(bq ls "$project:$dataset" | awk 'print $1' | tail +3)
for table in $tables
do
bq extract --destination_format "CSV" --compression "GZIP" "$project:$dataset.$table" "gs://$bucket/$table/$table.csv.gz"
done
另外,如果您想在async
模式下运行命令,请将提取命令替换为以下
bq --nosync extract --destination_format "CSV" --compression "GZIP" "$project:$dataset.$table" "gs://$bucket/$table/$table.csv.gz"
PS:
确保bq
命令行工具已安装并且在您的环境中。它带有google cloud SDK
。要验证您可以运行bq help
【讨论】:
是否可以在命令行中使用bq
模式编写多行代码?例如,当我尝试此# get list of tables tables=$(bq ls "$project:$dataset" | awk 'print $1' | tail +3)
时,我收到此错误unknown syntax
只需将上面的脚本保存在一个文件中,比如说export_bq.sh
并通过运行bash export_bq.sh
来执行它。如果您只想运行单行替换参数$project:$dataset
与实际值
感谢您的回答!你的意思是我把它保存到我的本地或云端?是否有任何指南解释这一点?例如,我找不到任何解释使用bash
运行外部脚本的谷歌云资源?我是否遗漏了什么,或者没有足够的文档?以上是关于将 10 个数据集(每个数据集有 80 个表)从 bigquery 导出到 google 存储的有效方法?的主要内容,如果未能解决你的问题,请参考以下文章
数据库备份与还原的过程中介质集有2个介质簇,但只提供了1个。必须提供所有成员
[数据库]Sql server 数据库的备份和还原____还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员”