批量加载数据

您可以将 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.create
  • bigquery.tables.updateData
  • bigquery.tables.update
  • bigquery.jobs.create

以下预定义 IAM 角色都具有将数据加载到 BigQuery 表或分区所需的权限:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/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 资源路径,请执行以下操作:

  1. 打开 Cloud Storage 控制台

    Cloud Storage 控制台

  2. 浏览到包含源数据的对象(文件)所在的位置。

  3. 点击对象的名称。

    对象详情页面随即会打开。

  4. 复制 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 中添加了世代编号,则加载作业将失败。