Amazon Athena Google BigQuery 连接器 - Amazon Athena

Amazon Athena Google BigQuery 连接器

适用于 Google BigQuery 的 Amazon Athena 连接器使 Amazon Athena 能够对您的 Google BigQuery 数据运行 SQL 查询。

先决条件

限制

  • Lambda 函数的最大超时值为 15 分钟。每次拆分都会在 BigQuery 上执行一次查询,并且必须有足够的时间来存储结果,以便 Athena 读取。如果 Lambda 函数超时,查询将失败。

  • Google BigQuery 区分大小写。连接器尝试更正数据集名称、表名称和项目 ID。这很有必要,因为 Athena 所有元数据均采用小写形式。这些更正对 Google BigQuery 进行了许多额外的调用。

  • 不支持 Binary 数据类型。

  • 由于 Google BigQuery 的并发和配额限制,连接器可能会遇到 Google 配额限制问题。为了避免这些问题,请尽可能多地向 Google BigQuery 施加限制。有关 BigQuery 配额的信息,请参阅 Google BigQuery 文档中的 配额和限制

参数

使用本节中的 Lambda 环境变量来配置 Google BigQuery 连接器。

  • spill_bucket - 为超出 Lambda 函数限制的数据指定 Amazon S3 存储桶。

  • spill_prefix -(可选)默认为指定 spill_bucket(称为 athena-federation-spill)中的子文件夹。我们建议您在此位置配置 Amazon S3 存储生命周期,以删除早于预定天数或小时数的溢出内容。

  • spill_put_request_headers —(可选)用于溢出的 Amazon S3 putObject 请求的请求标头和值的 JSON 编码映射(例如 {"x-amz-server-side-encryption" : "AES256"})。有关其他可能的标头,请参阅《Amazon Simple Storage Service API 参考》中的 PutObject

  • kms_key_id -(可选)默认情况下,将使用经过 AES-GCM 身份验证的加密模式和随机生成的密钥对溢出到 Amazon S3 的任何数据进行加密。要让您的 Lambda 函数使用 KMS 生成的更强的加密密钥(如 a7e63k4b-8loc-40db-a2a1-4d0en2cd8331),您可以指定 KMS 密钥 ID。

  • disable_spill_encryption -(可选)当设置为 True 时,将禁用溢出加密。默认值为 False,此时将使用 AES-GCM 对溢出到 S3 的数据使用进行加密 - 使用随机生成的密钥,或者使用 KMS 生成密钥。禁用溢出加密可以提高性能,尤其是当您的溢出位置使用服务器端加密时。

  • gcp_project_id - 项目 ID(不是项目名称),包含连接器应从中读取的数据集(例如 semiotic-primer-1234567)。

  • secret_manager_gcp_creds_name - AWS Secrets Manager 中的密钥名称,包含 JSON 格式的 BigQuery 凭证(例如 GoogleCloudPlatformCredentials)。

  • big_query_endpoint –(可选)BigQuery 私有端点的 URL。如果您想通过私有端点访问 BigQuery,使用此参数。

拆分与视图

由于 BigQuery 连接器使用 BigQuery 存储读取 API 来查询表,而 BigQuery 存储 API 不支持视图,所以该连接器使用具有单个视图拆分功能的 BigQuery 客户端。

性能

为了查询表,BigQuery 连接器使用了 BigQuery 存储读取 API,该 API 使用基于 RPC 的协议,支持快速访问 BigQuery 托管存储。有关 BigQuery 存储读取 API 的更多信息,请参阅 Google Cloud 文档中的使用 BigQuery 存储读取 API 读取表格数据

选择列的子集可以显著减少查询运行时及扫描的数据。随着并发增加,连接器容易出现查询失败,并且通常是慢速连接器。

Athena Google BigQuery 连接器执行谓词下推,以减少查询扫描的数据。LIMIT 子句、ORDER BY 子句、简单谓词和复杂表达式将下推到连接器,以减少扫描数据量并缩短查询执行的运行时间。

LIMIT 子句

LIMIT N 语句用于减少查询扫描的数据量。LIMIT N 下推时,连接器仅向 Athena 返回 N 行。

前 N 个查询

N 个查询用于指定结果集的顺序以及返回的行数限值。您可以使用此类查询确定数据集的前 N 个最大值或前 N 个最小值。前 N 个查询下推时,连接器仅向 Athena 返回 N 个已排序行。

Predicates

谓词是 SQL 查询的 WHERE 子句中的表达式,其评估结果为布尔值并根据多个条件筛选行。Athena Google BigQuery 连接器可以组合这些表达式并将其直接推送到 Google BigQuery,以增强功能并减少扫描数据量。

以下 Athena Google BigQuery 连接器运算符支持谓词下推:

  • 布尔值:AND、OR、NOT

  • 相等:EQUAL、NOT_EQUAL、LESS_THAN、LESS_THAN_OR_EQUAL、GREATER_THAN、GREATER_THAN_OR_EQUAL、IS_DISTINCT_FROM、NULL_IF、IS_NULL

  • 算术:ADD、SUBTRACT、MULTIPLY、DIVIDE、MODULUS、NEGATE

  • 其他:LIKE_PATTERN、IN

组合下推示例

要增强查询功能,组合下推类型,如以下示例所示:

SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') ORDER BY col_a DESC LIMIT 10;

传递查询

Google BigQuery 连接器支持传递查询。传递查询使用表函数将完整查询下推到数据来源来执行查询。

要在 Google BigQuery 中执行传递查询,可以使用以下语法:

SELECT * FROM TABLE( system.query( query => 'query string' ))

以下示例查询将查询下推到 Google BigQuery 中的数据来源。该查询选择了 customer 表中的所有列,将结果限制为 10。

SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))

许可证信息

Amazon Athena Google BigQuery 连接器项目已获得 Apache-2.0 许可证授权。

使用此连接器,即表示您确认包含第三方组件(这些组件的列表可在此连接器的 pom.xml 文件中找到),并同意 GitHub.com 上的 LICENSE.txt 文件中提供的相应第三方许可证中的条款。

其他资源

有关此连接器的更多信息,请访问 GitHub.com 上的相应站点