我正在尝试将整个表从BigQuery转移到Cloud SQL。经过研究,我将表格下载到 csv 格式文件中到 GCS 存储桶中。然后,我创建了一个 Cloud SQL MySQL 实例、一个数据库和一个与 BigQuery 表具有相同架构的表。
现在,我按照此处的说明进行操作:https://cloud.google.com/sql/docs/mysql/import-export/importing 将这些 csv 文件导入云 SQL 数据库。
它适用于单个文件,但如果我尝试使用 * 如 gs://bucket/fileprefix_*,我会收到一个错误:错误:(gcloud.sql.import.csv( HTTPError 403:服务账户没有存储桶所需的权限。
我的表大约为 52GB,在导出到存储桶时分片为 69 个 csv 文件。
我试过了 gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:W gs://[BUCKET_NAME]/
gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:R gs://[BUCKET_NAME]/[IMPORT_FILE_NAME]
gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:O gs://[BUCKET_NAME]/[IMPORT_FILE_NAME]
我也去了IAM并编辑了服务帐户的权限,但这没有帮助。
正如格雷厄姆在评论中提到的,您授予的权限可能是罪魁祸首。
他提到了storage.objects.list,这是你肯定需要的,但我认为你可能还需要storage.buckets.get。
我的理由是,对于单个对象访问,您根本不需要了解存储桶的任何信息......但是要获取对象的完整列表,它必须由存储桶元标记检索,这意味着需要对存储桶本身的权限。我不确定,但如果您尚未在服务帐户上设置这两个权限,请试一试。