数据加载简介

本页面简要介绍了如何将数据加载到 BigQuery 中。

概览

许多情况下,您无需加载数据即可执行查询。 但在其他所有情况下,您必须先将数据加载到 BigQuery 中,然后才能运行查询。

您可以通过以下方式加载数据:

目前不支持将 Google 云端硬盘中的数据加载到 BigQuery,但您可以使用外部表查询 Google 云端硬盘中的数据。

您可以将数据加载到新的表或分区或者将数据附加到现有的表或分区,也可以覆盖某个表或分区。如需详细了解如何使用分区,请参阅管理分区表

将数据加载到 BigQuery 时,您可以提供表或分区架构;对于受支持的数据格式,您可以使用架构自动检测功能。

限制

将数据加载到 BigQuery 时,您会受到如下限制:

  • 目前,您只能将 Cloud Storage 或可读数据源(如本地机器)中的数据加载到 BigQuery。

另外,可能还存在其他限制,具体取决于源数据的位置和格式。如需了解详情,请参阅以下内容:

支持的数据格式

从 Cloud Storage 和可读数据源加载数据时,BigQuery 支持下列格式:

加载数据时,默认源格式为 CSV。要加载以其他某种受支持的数据格式存储的数据,请明确指定相应格式。在您的数据加载到 BigQuery 后,系统会将其转换为适用于 Capacitor 的列式格式(BigQuery 的存储格式)。

选择数据提取格式

您可以将各种格式的数据加载到 BigQuery 中。在您的数据加载到 BigQuery 后,系统会将其转换为适用于 Capacitor 的列式格式(BigQuery 的存储格式)。

加载数据时,请根据以下几个因素选择数据提取格式:

  • 数据的架构

    Avro、CSV、JSON、ORC 和 Parquet 都支持平面数据。Avro、JSON、ORC、Parquet、Datastore 导出文件和 Cloud Firestore 导出文件还支持包含嵌套重复字段的数据。表示分层数据时,这种嵌套重复数据会很实用。此外,在对数据进行反规范化处理时,嵌套重复字段可以减少重复情况。

  • 嵌入式换行符

    从 JSON 文件加载数据时,各行内容必须以换行符分隔。在 BigQuery 中,以换行符分隔的 JSON 文件必须每行包含一条记录。

  • 外部限制

    您的数据可能来自以 JSON 格式原生存储数据的文档存储数据库,也可能来自仅以 CSV 格式导出数据的来源。

加载编码数据

BigQuery 支持采用 UTF-8 编码的嵌套数据或重复数据以及平展型数据。此外,它还支持采用 ISO-8859-1 编码的平展型数据,但这仅适用于 CSV 文件。

字符编码

默认情况下,BigQuery 服务的所有源数据均应采用 UTF-8 编码。 如果您的 CSV 文件包含采用 ISO-8859-1 格式编码的数据,您可以在导入数据时视需要明确指定此编码格式,让 BigQuery 可以在导入过程中将数据正确转换为 UTF-8 格式。目前,只能导入采用 ISO-8859-1 或 UTF-8 编码的数据。指定数据的字符编码时,请谨记以下事项:

  • 如果您没有指定编码格式,或者您虽然明确指定数据为 UTF-8 编码格式,但随后并未提供采用 UTF-8 编码的 CSV 文件,则 BigQuery 会尝试将您的 CSV 文件转换为 UTF-8 格式。

    一般来说,您的数据可以成功导入,但可能并不是每个字节都符合您的预期。为避免发生这种情况,请指定正确编码并重试导入操作。

  • 分隔符必须采用 ISO-8859-1 编码。

    一般而言,最佳做法是使用标准分隔符,例如制表符、竖线符或英文逗号。

  • 如果 BigQuery 无法转换某个字符,则该字符会被转换为标准 Unicode 替换字符:�。
  • JSON 文件必须始终为 UTF-8 编码格式。

如果您打算使用 API 加载采用 ISO-8859-1 编码的平面数据,请在 load 作业配置中指定 encoding 属性。

加载经过压缩和未经压缩的数据

加载压缩数据和未压缩数据时,首选格式都是 Avro 二进制格式。Avro 数据加载速度更快,因为可以并行读取数据,即使数据块已经过压缩也是如此。系统不支持压缩的 Avro 文件,但支持压缩的数据块。BigQuery 支持将 DEFLATE 和 Snappy 编解码器用于 Avro 文件中的压缩数据块。

Parquet 二进制格式也是一个不错的选择,因为 Parquet 可高效地逐列进行编码,这通常会改善压缩比并减小文件大小。Parquet 文件还可利用支持并行加载文件的压缩方法。 系统不支持经过压缩的 Parquet 文件,但支持经过压缩的数据块。对于 Parquet 文件中的压缩数据块,BigQuery 支持使用 Snappy、GZip 和 LZO_1X 编解码器。

ORC 二进制文件格式的优势与 Parquet 格式相类似。ORC 文件中的数据加载速度很快,因为可以并行读取数据条带。每个数据条带中的行将按顺序加载。为了优化加载时间,建议使用大小约为 256 MB 或更小的数据条带。系统不支持经过压缩的 ORC 文件,但支持经过压缩的文件页脚和条带。 对于 ORC 文件页脚和条带,BigQuery 支持使用 Zlib、Snappy、LZO 和 LZ4 压缩。

对于其他数据格式(如 CSV 和 JSON),BigQuery 加载未经压缩文件的速度要比加载经过压缩的文件快得多,因为系统可以并行读取未经压缩的文件。由于未经压缩的文件较大,因此使用这些文件可能会超出带宽限制,并且数据在加载到 BigQuery 之前会产生较高的 Cloud Storage 暂存费用。请注意,无论文件是否已经过压缩,都无法保证行的排序。您需要根据具体用例来权衡这些利弊,这一点很重要。

一般来说,如果带宽有限,建议先使用 gzip 将 CSV 和 JSON 文件压缩,然后再上传到 Cloud Storage。目前,当您将数据加载到 BigQuery 中时,gzip 是 CSV 和 JSON 文件唯一支持的文件压缩类型。如果加载速度对您的应用很重要,并且您有足够的带宽来加载数据,请将文件保留为未压缩状态。

加载反规范化的嵌套重复数据

许多开发者都习惯于使用关系型数据库和规范化的数据架构。 规范化处理可避免存储重复的数据,还可确保数据定期更新的一致性。

在数据经过反规范化处理后,BigQuery 的执行效果最佳。要提高性能,您可以对数据进行反规范化并利用嵌套重复的字段,而无需保留星型或雪花型等关系架构。嵌套重复的字段不但可以保持数据之间的关系,而且也不会因保留关系(规范化)架构对性能产生影响。

使用规范化数据节省的存储空间对于现代系统来说已不再那么重要。使用反规范化的数据虽然会增加存储费用,但可以提高性能,因此是值得的。联接需要协调数据(通信带宽)。反规范化会将数据本地化到各个,因此可以实现并行执行。

要在对数据进行反规范化的同时保持关系,您可以使用嵌套重复字段,而不是完全展平数据。如果将关系型数据完全展平,网络通信(数据重排)会对查询性能产生负面影响。

例如,如果对订单架构进行反规范化而不使用嵌套重复的字段,您可能需要按 order_id 这样的字段进行数据分组(如果存在一对多关系)。由于涉及数据重排,与使用嵌套重复的字段对数据进行反规范化相比,对数据进行分组的做法效率较为低下。

在某些情况下,对数据进行反规范化并使用嵌套重复字段并不会提高性能。在以下用例中,请避免执行反规范化操作:

  • 您采用的是星型架构且维度更改频繁。
  • BigQuery 执行行级层的变更来补全 Online Transaction Processing (OLTP) 系统,但无法取代该系统。

嵌套重复的字段支持以下数据格式:

  • Avro
  • JSON(以换行符分隔)
  • ORC
  • Parquet
  • Datastore 导出文件
  • Cloud Firestore 导出文件

如需了解如何在加载数据时指定架构中的嵌套重复字段,请参阅指定嵌套重复的字段

架构自动检测功能

在将数据加载到 BigQuery 以及查询外部数据源时,您可以使用架构自动检测功能。

启用自动检测功能后,BigQuery 会按以下方式开始推理过程:在数据源中随机选择一个文件,然后扫描最多 100 行数据以用作代表性样本。BigQuery 接着检查每个字段,并尝试根据样本中的值向该字段分配数据类型。

加载 JSON 或 CSV 文件时,您可以使用架构自动检测功能。架构自动检测功能不适用于 Avro 文件、ORC 文件、Parquet 文件、Datastore 导出文件或 Cloud Firestore 导出文件,因为在这些格式的文件中,架构采用自描述形式。

从其他 Google 服务加载数据

BigQuery Data Transfer Service

BigQuery Data Transfer Service 会自动将以下服务中的数据加载到 BigQuery:

Google 软件即服务 (SaaS) 应用 外部云存储服务商 数据仓库 此外,Google Cloud Marketplace 提供了多项第三方转移作业服务(Beta 版)。

配置完数据转移功能后,BigQuery Data Transfer Service 会自动安排和管理从源应用到 BigQuery 的定期数据加载作业。

Google Analytics 360

如需了解如何将会话和命中数据从 Google Analytics 360 报告数据视图导出到 BigQuery,请参阅 Google Analytics(分析)帮助中心内的 BigQuery Export

如需查看在 BigQuery 中查询 Google Analytics(分析)数据的示例,请参阅 Google Analytics(分析)帮助中的 BigQuery 实战宝典

Cloud Storage

BigQuery 支持从 Cloud Storage 加载数据。 如需了解详情,请参阅从 Cloud Storage 加载数据

Datastore

BigQuery 支持从 Datastore 导出文件加载数据。 如需了解详情,请参阅从 Datastore 导出文件加载数据

Cloud Firestore

BigQuery 支持从 Cloud Firestore 导出文件加载数据。 如需了解详情,请参阅从 Cloud Firestore 导出文件加载数据

Dataflow

Dataflow 可以将数据直接加载到 BigQuery 中。如需详细了解如何使用 Dataflow 对 BigQuery 执行读写操作,请参阅 Apache Beam 文档中的 BigQuery I/O 连接器

加载数据的替代方案

在以下情况下,您无需在运行查询之前加载数据:

公共数据集
公共数据集是存储在 BigQuery 中并公开共享的数据集。如需了解详情,请参阅 BigQuery 公共数据集
共享数据集
您可与他人共享存储在 BigQuery 中的数据集。如果有人与您共享了某个数据集,您可以在不加载数据的情况下对该数据集运行查询。
外部数据源
您可以跳过数据加载过程,方法是创建以外部数据源为基础的表。如需了解这种方法的优点和限制,请参阅外部数据源
日志文件
Stackdriver Logging 提供了将日志文件导出到 BigQuery 的选项。如需了解详情,请参阅使用日志查看器导出日志

另一种数据加载方法是以一次一条记录的方式流式插入数据。 如果您希望数据立即可供使用,通常就需要使用流式插入数据的方式。 如需了解流式插入,请参阅将数据流式插入 BigQuery

配额政策

如需了解与加载数据相关的配额政策,请参阅“配额和限制”页面中的加载作业

价格

目前,将数据加载到 BigQuery 的操作不会产生任何费用。 如需了解详情,请参阅价格页面。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面