将 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 存储的有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

深度学习——制作自己的VOC图像分割数据集

数据库备份与还原的过程中介质集有2个介质簇,但只提供了1个。必须提供所有成员

我使用 sklearn 进行语言识别的数据集有问题吗?

数据集可以使用存储过程返回多少个表

[数据库]Sql server 数据库的备份和还原____还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员”

实时 SVM 性能差