将 GCS 存储桶中的 .csv 文件中的数据加载到 Cloud SQL 表中:
Posted
技术标签:
【中文标题】将 GCS 存储桶中的 .csv 文件中的数据加载到 Cloud SQL 表中:【英文标题】:Loading data from .csv files in GCS bucket into a Cloud SQL table: 【发布时间】:2020-05-06 20:42:40 【问题描述】:我正在尝试将整个表从 BigQuery 传输到 Cloud SQL。经过研究,我将表格下载为 csv 格式文件到 GCS 存储桶中。然后我创建了一个 Cloud SQL mysql 实例、一个数据库和一个与 BigQuery 表具有相同架构的表。
现在,我按照此处的说明进行操作:https://cloud.google.com/sql/docs/mysql/import-export/importing 将这些 csv 文件导入 Cloud SQL 数据库。
它适用于单个文件,但如果我尝试使用 * like 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
。
【参考方案1】:
正如格雷厄姆在评论中提到的那样,您授予的权限可能是罪魁祸首。
他提到了 storage.objects.list,这肯定是您需要的,但我认为您可能还需要 storage.buckets.get。
我的理由是,对于单个对象访问,您根本不需要了解存储桶的任何信息...但是要获取对象的完整列表,必须通过存储桶元标记检索它,这意味着需要对存储桶本身的许可。我不确定,但如果您还没有在服务帐户上设置这两个权限,请试一试。
【讨论】:
以上是关于将 GCS 存储桶中的 .csv 文件中的数据加载到 Cloud SQL 表中:的主要内容,如果未能解决你的问题,请参考以下文章
如何将 GCS 中的 csv 随机样本导出到 BigQuery
GCP将数据作为字符串从GCS中的CSV文件加载到BigQuery表中