当导入文件包含通配符时,gcloud sql 导入 csv 失败并出现权限错误

gcloud sql import csv fails with permissions error when import file contains wildcard

根据 Google Cloud Platform SQL 文档,我应该能够通过在文件名中添加 * 来导出和导入 GCS 存储桶中的分片文件。

如果我导入单个文件,它工作正常:

gcloud sql import csv sql-instance-name gs://gcsbucketname/data/led/led_finance_view_000000000000.csv --project=project-name --database=finance --table=Import_Test -q
Importing data into Cloud SQL instance...done.
Imported data from [gs://gcsbucketname/data/led/led_finance_view_000000000000.csv] into [https://www.googleapis.com/sql/v1beta4/projects/project-name/instances/sql-instance-name].

但是如果我导入一个分片文件,它会抛出一个权限错误:

gcloud sql import csv sql-instance-name gs://gcsbucketname/data/led/led_finance_view_*.csv --project=project-name --database=finance --table=Import_Test -q
ERROR: (gcloud.sql.import.csv) HTTPError 403: The service account does not have the required permissions for the bucket.

我可以确认这些命令在同一用户下 运行,使用相同的存储桶和 SQL 实例。

我认为“403 服务帐户权限”错误可能是 GCP 中的错误,因此是转移注意力的问题 - 但为什么它不允许我导入分片文件?

目前,CloudSQL 不包含使用通配符一次导入多个 CSV 文件的可能性。我为此开了一个public feature request。您可以加注星标以提高知名度。

同时,作为一种变通方法,您可以使用脚本运行 为每个文件执行一次导入命令,或者在导入之前加入 CSV 文件。

您必须获取当前数据库实例的(创建的)用户 ID,为了获取该用户 ID,请在您的终端中键入如下内容:

命令:gcloud sql 实例描述短 [name/db 实例]

之后,转到 gcs 项目 -> 打开你的存储桶 -> 添加成员许可,你必须添加你在第一个命令中获得的用户 ID,为该用户 ID 添加 Storage Admin 角色。

仅此而已。