BigQuery 连接器

BigQuery 连接器允许查询存储在 BigQuery 中的数据。这可以用来连接不同系统(如 BigQuery 和 Hive)之间的数据。该连接器使用 BigQuery 存储 API 从表中读取数据。

Beta 免责声明

BigQuery 存储 API 和此连接器处于 Beta 阶段,可能会发生变化。

更改可能包括但不限于

  • 类型转换

  • 分区

  • 参数

BigQuery 存储 API

存储 API 通过 gRPC 直接从 BigQuery 并行流式传输数据,而不使用 Google Cloud Storage 作为中间媒介。与使用以前的基于导出的读取流程相比,它具有许多优势,通常会导致更好的读取性能

直接流式传输

它不会在 Google Cloud Storage 中留下任何临时文件。行使用 Avro 线格式直接从 BigQuery 服务器读取。

列过滤

新的 API 允许列过滤以仅读取您感兴趣的数据。 由列式数据存储支持,它可以有效地流式传输数据,而无需读取所有列。

动态分片

API 在所有读取器完成之前重新平衡读取器之间的记录。这意味着所有映射阶段将几乎同时完成。有关 Google Cloud Dataflow 中如何使用动态分片 的说明,请参阅此博文文章。

要求

启用 BigQuery 存储 API

按照 这些说明 操作。

身份验证

在 GCE/Dataproc 上,身份验证取自机器的角色。

在 GCE/Dataproc 之外,您有 3 个选项

  • 使用服务帐户 JSON 密钥和 GOOGLE_APPLICATION_CREDENTIALS,如 此处 所述。

  • 在目录属性文件中设置 bigquery.credentials。它应包含 JSON 文件的内容,使用 Base64 编码。

  • 在目录属性文件中设置 bigquery.credentials-file。它应指向 JSON 文件的位置。

配置

要配置 BigQuery 连接器,请在 etc/catalog 中创建一个目录属性文件,例如命名为 bigquery.properties,将 BigQuery 连接器安装为 bigquery 目录。使用以下内容创建文件,并根据您的设置情况替换连接属性

connector.name=bigquery
bigquery.project-id=<your Google Cloud Platform project id>

多个 GCP 项目

BigQuery 连接器只能访问单个 GCP 项目。因此,如果您在多个 GCP 项目中拥有数据,则需要创建多个目录,每个目录指向不同的 GCP 项目。例如,如果您有两个 GCP 项目,一个用于销售,另一个用于分析,您可以在 etc/catalog 中创建两个属性文件,分别命名为 sales.propertiesanalytics.properties,它们都具有 connector.name=bigquery,但具有不同的 project-id。这将分别创建两个目录,salesanalytics

配置分区

默认情况下,连接器在正在读取的表中(在过滤之前)每 400 MB 创建一个分区。这应该大致对应于 BigQuery 存储 API 支持的最大读取器数量。这可以通过 bigquery.parallelism 属性显式配置。BigQuery 可能会根据服务器限制来限制分区数量。

从视图中读取

连接器对从 BigQuery 视图 中读取数据提供了初步支持。请注意,有一些注意事项

  • BigQuery 视图默认情况下不会物化,这意味着连接器需要在读取它们之前将它们物化。此过程会影响读取性能。

  • 物化过程还会给您的 BigQuery 账单带来额外的费用。

  • 默认情况下,物化的视图是在同一个项目和数据集中创建的。这些可以通过可选的 bigquery.view-materialization-projectbigquery.view-materialization-dataset 属性分别进行配置。服务帐户必须对该项目和数据集具有写入权限,以便能够物化该视图。

  • 默认情况下,从视图中读取数据是禁用的。为了启用它,请将 bigquery.views-enabled 配置属性设置为 true

配置属性

所有配置属性都是可选的。

属性

描述

默认值

bigquery.project-id

Google Cloud 项目 ID

取自服务帐户

bigquery.parent-project

Google Cloud 父项目 ID

取自服务帐户

bigquery.parallelism

要将数据拆分的区部分数

执行器数量

bigquery.views-enabled

启用 BigQuery 连接器读取视图。

false

bigquery.view-materialization-project

将要创建物化视图的项目

视图的项目

bigquery.view-materialization-dataset

将要创建物化视图的数据集

视图的数据集

bigquery.max-read-rows-retries

如果遇到可重试的服务器问题,重试次数

3

bigquery.credentials-key

凭据密钥(Base64 编码)

无。请参阅 身份验证

bigquery.credentials-file

JSON 凭据文件路径

无。请参阅 身份验证

数据类型

除了少数例外,所有 BigQuery 类型都直接映射到它们的 Presto 对应类型。以下是所有映射

BigQuery

Presto

说明

BOOLEAN

BOOLEAN

BYTES

VARBINARY

DATE

DATE

DATETIME

TIMESTAMP

FLOAT

DOUBLE

GEOGRAPHY

VARCHAR

Well-known text (WKT) 格式

INTEGER

BIGINT

NUMERIC

DECIMAL(38,9)

RECORD

ROW

STRING

VARCHAR

TIME

TIME_WITH_TIME_ZONE

时区为 UTC

TIMESTAMP

TIMESTAMP_WITH_TIME_ZONE

时区为 UTC

常见问题解答

存储 API 的价格是多少?

请参阅 BigQuery 定价文档