将多个文件从 Cloud Storage 导入 BigQuery 的命令

Posted

技术标签:

【中文标题】将多个文件从 Cloud Storage 导入 BigQuery 的命令【英文标题】:Command to import multiple files from Cloud Storage into BigQuery 【发布时间】:2020-07-27 08:32:54 【问题描述】:

我发现这个命令列出了所有文件的路径:

gsutil ls "gs://bucket/foldername/*.csv"

此命令将文件导入 BQ 并自动检测架构:

bq load --autodetect --source_format=CSV dataset.tableName gs://bucket/foldername/something.csv

现在我需要让它一起工作,将所有文件导入到 BQ 中的各个表中。如果表存在,则替换它。你能帮我一把吗?

【问题讨论】:

AFAIK 要加载到多个表,您需要更多的脚本。如果我希望所有文件都放在同一个表中,我会使用* 不,仅此而已。需要 sed 或 xargs 或其他东西来按顺序执行。没有那么多桌子 尝试将该信息添加到问题中 - 或发布一个新的说明您想要什么样的脚本 【参考方案1】:

首先,创建一个包含所有要加载到 BigQuery 中的文件夹的列表的文件:

gsutil ls "gs://bucket/foldername/*.csv" > allmynicetables.txt

然后,创建一个简单的循环,对 allmynicetables.txt 中列出的每个 csv 文件重复加载操作:

while read p ; do bq load --autodetect --replace=true --source_format=CSV dataset.tableName $p ; done < allmynicetables.txt

只是一些澄清:

--replace=true 可以覆盖现有表。

另外,我不知道你为什么放dataset.tableName,你总是复制到同一个数据集吗?您可以从 .csv 源文件的名称中提取所需的数据集/表名称吗?从您的问题中我不清楚这一点,请澄清。

【讨论】:

以上是关于将多个文件从 Cloud Storage 导入 BigQuery 的命令的主要内容,如果未能解决你的问题,请参考以下文章

从 Cloud Function (python) 写入 Google Cloud Storage

如何将多个(不同)文件上传到 Cloud Storage Firebase?

从 Google Cloud Storage 复制时排除特定文件或目录

通过 Python 客户端库将多个文件上传到 Google Cloud Storage

从 Cloud Storage 导入 BigQuery 时出现后端错误

我们可以请求从 Google Cloud Storage 到 BigQuery 的多少并发上传?