将数据加载到 BigQuery:简介

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

概览

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

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

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

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

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

限制

将数据加载到 BigQuery 将受到以下限制:

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

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

支持的数据格式

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

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

选择数据提取格式

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

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

  • 数据的架构。

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

  • 嵌入式换行符。

    从 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 编码的平展型数据,请指定 configuration.load.encoding 属性。

加载压缩和未压缩的数据

加载压缩数据时,首选格式是 Avro 二进制格式。Avro 数据加载速度更快,因为可以并行读取数据,即使数据块已经过压缩也是如此。

Parquet 二进制格式也是一个不错的选择,因为 Parquet 可高效地逐列进行编码,这通常会改善压缩比并减小文件大小。Parquet files 文件还可利用支持并行加载文件的压缩方法。

ORC 二进制格式的优势与 Parquet 格式相类似。ORC 文件中的数据加载速度很快,因为可以并行读取数据条带。每个数据条带中的行将按顺序加载。为了优化加载时间,建议使用大小约为 256 MB 或更小的数据条带。

对于其他数据格式(如 CSV 和 JSON),BigQuery 加载未压缩文件的速度要比加载压缩文件快得多,因为可以并行读取未压缩文件。由于未压缩文件较大,因此在加载到 BigQuery 之前,使用这些文件可能会导致带宽限制和较高的 Cloud Storage 数据暂存费用。同时还要注意,压缩文件和未压缩文件都不能保证行的排序。务必要根据具体使用场景来权衡这些利弊。

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

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

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

BigQuery 最适合处理反规范化的数据。与其保留星型或雪花型等关系架构,不如对数据进行反规范化并利用嵌套的重复字段。嵌套的重复字段不但可以保持关系,而且也不会因保留关系(规范化)架构对性能产生影响。

通过规范化数据节省存储空间已经不是现代系统所关心的问题。对数据进行反规范化虽然会增加存储费用,但可以提高性能,因此是值得的。联接需要协调数据(通信带宽)。反规范化会将数据本地化到各个,因此可以实现并行执行。

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

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

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

  • 您采用的是星型架构且维度更改频繁。
  • BigQuery 通过行级层变更对联机事务处理 (Online Transaction Processing, OLTP) 系统进行补充,但无法替代该系统。

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

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

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

架构自动检测

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

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

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

从其他 Google 服务加载数据

BigQuery Data Transfer Service

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

配置完数据传输后,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 加载数据

Cloud Datastore

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

Cloud Firestore

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

Google Cloud Dataflow

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

加载数据的替代方案

在以下情况中,您无需加载数据即可运行查询:

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

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

配额政策

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

价格

目前,将数据加载到 BigQuery 是免费的。如需了解详情,请参阅价格页面。

后续步骤

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

发送以下问题的反馈:

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