批量加载数据
您可以将 Cloud Storage 中的数据或本地文件作为批量操作加载到 BigQuery 中。源数据可以采用以下任一格式:
- Avro
- 英文逗号分隔值 (CSV)
- JSON(以换行符分隔)
- ORC
- Parquet
- 存储在 Cloud Storage 中的 Datastore 导出文件。
- 存储在 Cloud Storage 中的 Firestore 导出文件
您还可以使用 BigQuery Data Transfer Service 设置从 Cloud Storage 到 BigQuery 的周期性加载作业。
准备工作
授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色,并创建一个数据集来存储您的数据。
所需权限
如需将数据加载到 BigQuery,您需要拥有 IAM 权限才能运行加载作业以及将数据加载到 BigQuery 表和分区中。如果要从 Cloud Storage 加载数据,您还需要拥有访问包含数据的存储桶的 IAM 权限。
将数据加载到 BigQuery 的权限
如需将数据加载到新的 BigQuery 表或分区中,或者附加或覆盖现有的表或分区,您需要拥有以下 IAM 权限:
bigquery.tables.createbigquery.tables.updateDatabigquery.tables.updatebigquery.jobs.create
以下预定义 IAM 角色都具有将数据加载到 BigQuery 表或分区所需的权限:
roles/bigquery.dataEditorroles/bigquery.dataOwnerroles/bigquery.admin(包括bigquery.jobs.create权限)bigquery.user(包括bigquery.jobs.create权限)bigquery.jobUser(包括bigquery.jobs.create权限)
此外,如果您拥有 bigquery.datasets.create 权限,则可以在自己创建的数据集中使用加载作业创建和更新表。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
从 Cloud Storage 加载数据的权限
如需获得从 Cloud Storage 存储桶加载数据所需的权限,请让您的管理员为您授予存储桶的 Storage Admin (roles/storage.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色可提供从 Cloud Storage 存储桶加载数据所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需从 Cloud Storage 存储桶加载数据,您需要具备以下权限:
-
storage.buckets.get -
storage.objects.get -
storage.objects.list (required if you are using a URI wildcard)
创建数据集
创建 BigQuery 数据集来存储数据。
从 Cloud Storage 加载数据
BigQuery 支持从以下任意一种 Cloud Storage 存储类别加载数据:
- 标准
- Nearline
- Coldline
- 归档
如需了解如何将数据加载到 BigQuery 中,请参阅数据格式页面:
如需了解如何配置从 Cloud Storage 到 BigQuery 的周期性负载,请参阅 Cloud Storage 转移作业。
位置注意事项
您无法在创建数据集后更改其位置,但可以复制数据集或手动移动数据集。如需了解详情,请参阅:
检索 Cloud Storage URI
要从 Cloud Storage 数据源加载数据,您必须提供 Cloud Storage URI。
Cloud Storage 资源路径包含存储桶名称和对象(文件名)。例如,如果 Cloud Storage 存储桶的名称为 mybucket,且数据文件的名称为 myfile.csv,则资源路径为 gs://mybucket/myfile.csv。
BigQuery 不支持 Cloud Storage 资源路径在初始双斜杠之后添加多个连续斜杠。Cloud Storage 对象名称可包含多个连续斜杠(“/”)字符。但是,BigQuery 会将多个连续斜杠转换为单个斜杠。例如,虽然以下资源路径在 Cloud Storage 中有效,但在 BigQuery 中无效:gs://bucket/my//object//name。
如需检索 Cloud Storage 资源路径,请执行以下操作:
打开 Cloud Storage 控制台
浏览到包含源数据的对象(文件)所在的位置。
点击对象的名称。
对象详情页面随即会打开。
复制 gsutil URI 字段中提供的值,该值以
gs://开头。
Google Datastore 导出文件只能指定一个 URI,且必须以 .backup_info 或 .export_metadata 结尾。
Cloud Storage URI 的通配符支持
如果您的数据分为多个文件,则可以使用星号 (*) 通配符选择多个文件。使用星号通配符必须遵循以下规则:
- 星号可以出现在对象名称内或对象名称末尾。
- 不支持使用多个星号。例如,路径
gs://mybucket/fed-*/temp/*.csv无效。 - 不支持在存储桶名称中使用星号。
示例:
以下示例展示了如何选择以前缀
gs://mybucket/fed-samples/fed-sample开头的所有文件夹中的所有文件:gs://mybucket/fed-samples/fed-sample*以下示例展示了如何仅选择名为
fed-samples的文件夹中和fed-samples的任何子文件夹中扩展名为.csv的文件:gs://mybucket/fed-samples/*.csv以下示例展示了如何选择文件夹
fed-samples中命名格式为fed-sample*.csv的文件。此示例不会选择fed-samples子文件夹中的文件。gs://mybucket/fed-samples/fed-sample*.csv
使用 bq 命令行工具时,您可能需要在某些平台上对星号进行转义。
从 Cloud Storage 加载 Datastore 或 Firestore 导出数据时,不能使用星号通配符。
限制
将数据从 Cloud Storage 存储桶加载到 BigQuery 时,需要遵循以下限制:
- BigQuery 不保证外部数据源的数据一致性。在查询运行的过程中,底层数据的更改可能会导致意外行为。
- BigQuery 不支持 Cloud Storage 对象版本控制。如果您在 Cloud Storage URI 中添加了世代编号,则加载作业将失败。