BigQuery Omni 简介

借助 BigQuery Omni,您可以使用 BigLake 表对存储在 Amazon Simple Storage Service (Amazon S3) 或 Azure Blob Storage 中的数据运行 BigQuery 分析。

许多组织会将数据存储在多个公有云中。这些数据往往处于孤岛状态,因为很难获取所有数据的数据分析。想必您会想要使用一个低成本、快速且不会产生分散化数据治理开销的多云数据工具来分析这些数据。现在,借助 BigQuery Omni,便可通过统一的界面避免上述的一些麻烦。

如需对外部数据运行 BigQuery 分析,您首先需要连接到 Amazon S3Blob Storage。如果要查询外部数据,您需要创建一个引用 Amazon S3 或 Blob Storage 数据的 BigLake 表

您还可以使用跨云转移在云之间移动数据以组合云之间的数据,或使用跨云联接跨云查询数据。BigQuery Omni 提供了一种跨云分析解决方案,该解决方案能够就地分析数据并在必要时灵活地复制数据。 如需了解详情,请参阅通过跨云转移加载数据跨云联接

架构

BigQuery 的架构会将计算功能与存储功能分离开来,使 BigQuery 能够根据需要进行扩容以处理非常大的工作负载。BigQuery Omni 则扩展了该架构,它能够在其他云端运行 BigQuery 查询引擎。因此,您不必以物理方式将数据移动到 BigQuery 存储空间中;它可以就地处理数据。

BigQuery Omni 架构

查询结果可以通过一个安全的连接返回到 Google Cloud,例如显示在 Google Cloud 控制台中。或者,您也可以将结果直接写入 Amazon S3 存储桶或 Blob Storage。在这种情况下,查询结果不会跨云移动。

BigQuery Omni 会使用标准 AWS IAM 角色或 Azure Active Directory 主账号来访问您的订阅中的数据。您可以向 BigQuery Omni 授予读取或写入权限,并且可以随时撤消其访问权限。

查询数据时的数据流

下图描述了以下查询的数据如何在 Google Cloud 与 AWS 或 Azure 之间移动:

  • SELECT 语句
  • CREATE EXTERNAL TABLE 语句
Google Cloud 与 AWS 或 Azure 之间的查询数据移动。
图 1:Google Cloud 与 AWS 或 Azure 之间的查询数据移动。
  1. BigQuery 控制平面通过 Google Cloud 控制台、bq 命令行工具、API 方法或客户端库接收来自您的查询作业。
  2. BigQuery 控制平面会将待处理的查询作业发送到 AWS 或 Azure 上的 BigQuery 数据平面。
  3. BigQuery 数据平面通过 VPN 连接从控制平面接收查询。
  4. BigQuery 数据平面从 Amazon S3 存储桶或 Blob Storage 读取表数据。
  5. BigQuery 数据平面对表数据运行查询作业。 系统会在指定的 AWS 或 Azure 区域处理表数据。
  6. 查询结果会通过 VPN 连接从数据平面传输到控制平面。
  7. BigQuery 控制平面会接收查询作业结果,以将其作为对查询作业的响应显示。此数据最长存储 24 小时。
  8. 查询结果会返回给您。

如需了解详情,请参阅查询 Amazon S3 数据Blob Storage 数据

导出数据时的数据流

下图描述了 EXPORT DATA 语句期间数据如何在 Google Cloud 与 AWS 或 Azure 之间移动。

Google Cloud 与 AWS 或 Azure 之间的导出查询数据移动。
图 2:Google Cloud 与 AWS 或 Azure 之间的导出查询数据移动。
  1. BigQuery 控制平面通过 Google Cloud 控制台、bq 命令行工具、API 方法或客户端库接收来自您的导出查询作业。该查询包含 Amazon S3 存储桶或 Blob Storage 中查询结果的目标路径。
  2. BigQuery 控制平面会将待处理的导出查询作业发送到 BigQuery 数据平面(在 AWS 或 Azure 上)。
  3. BigQuery 数据平面通过 VPN 连接从控制平面接收导出查询。
  4. BigQuery 数据平面从 Amazon S3 存储桶或 Blob Storage 读取表数据。
  5. BigQuery 数据平面对表数据运行查询作业。 系统会在指定的 AWS 或 Azure 区域处理表数据。
  6. BigQuery 会将查询结果写入 Amazon S3 存储桶或 Blob Storage 中的指定目标路径。

如需了解详情,请参阅将查询结果导出到 Amazon S3Blob Storage

优势

性能。您可以更快地获取数据分析,因为数据不会跨云复制,并且查询会在数据所在的区域中就地运行。

费用。 您可以节省出站数据转移费用,因为数据不会移动。您的 AWS 或 Azure 账号不会产生与 BigQuery Omni 分析相关的额外费用,因为查询是在由 Google 管理的集群上运行的。您只需使用 BigQuery 价格模式为您运行的查询付费。

安全性和数据治理。您可以在自己的 AWS 或 Azure 订阅中管理数据。您无需将原始数据从您的公有云中移动或复制出来。所有计算都在您的数据所属区域中运行的 BigQuery 多租户服务中完成。

无服务器架构。与 BigQuery 的其余部分一样,BigQuery Omni 也是一种无服务器架构。Google 会负责部署和管理运行 BigQuery Omni 的集群。您无需预配任何资源或管理任何集群。

便于管理。BigQuery Omni 通过 Google Cloud 提供了统一的管理界面。BigQuery Omni 可以使用现有的 Google Cloud 账号和 BigQuery 项目。您可以在 Google Cloud 控制台中编写 GoogleSQL 查询来查询 AWS 或 Azure 中的数据,并且可以查看显示在 Google Cloud 控制台中的结果。

跨云转移。您可以将 S3 存储桶和 Blob Storage 中的数据加载到 BigQuery 标准表中。如需了解详情,请参阅将 Amazon S3 数据转移到 BigQuery 以及将 Blob Storage 数据转移到 BigQuery

启用元数据缓存以提高性能

您可以使用缓存的元数据来提高引用 Amazon S3 数据的 BigLake 表的查询性能。如果您要处理大量文件,或者数据是 Hive 分区,则此方法特别有用。

BigLake 和对象表支持缓存来自外部数据源(例如 Cloud Storage 和 Amazon Simple Storage Service [Amazon S3])的文件的元数据。 元数据包括文件中的文件名、分区信息和物理元数据(例如行数)。您可以选择是否为表启用元数据缓存。包含大量文件和使用 Hive 分区过滤条件的查询从元数据缓存中获益最多。

如果您未启用元数据缓存,则针对表的查询必须读取外部数据源以获取对象元数据,这会增加查询延迟时间;列出来自外部数据源的数百万个文件可能需要几分钟的时间。如果启用了元数据缓存,查询可以避免列出外部数据源中的文件,从而加快分区和文件删减速度。

有两个属性可以控制此功能:

  • 最大过时,控制查询使用缓存元数据的时间。
  • 元数据缓存模式,控制元数据的收集方式。

启用元数据缓存后,您需要指定对表执行的操作可以接受的元数据过时的最大间隔时间。例如,当指定间隔时间为 1 小时的时候,如果缓存的元数据在过去 1 小时内刷新,针对表的操作会使用缓存的元数据。如果缓存的元数据早于该值,操作会回退到从 Cloud Storage 检索元数据。您可以指定从 30 分钟到 7 天的过时间隔时间。

您可以选择自动或手动刷新缓存:

  • 对于自动刷新,缓存会按系统定义的间隔时间刷新,间隔时间通常为 30 到 60 分钟。如果随机添加、删除或修改外部数据源中的文件,自动刷新缓存是一种很好的方法。如果您需要控制刷新的时间(例如在提取-转换-加载作业结束时触发刷新),请使用手动刷新。
  • 对于手动刷新,您需要运行 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系统过程,以按符合要求的时间表刷新元数据缓存。如果 Cloud Storage 中的文件添加、删除或修改的间隔时间是已知的(例如作为流水线的输出),则手动刷新缓存是一种很好的方法。

    如果您发出多个并发手动刷新,则只有一个刷新会成功。

如果元数据缓存在 7 天内没有刷新,则会失效。

在设置过时间隔时间和元数据缓存模式值之前,您应该考虑它们的交互方式。请参考以下示例:

  • 如果您要手动刷新表的元数据缓存并将过时间隔时间设置为 2 天,那么如果希望针对该表的操作使用缓存的元数据,您必须每 2 天(或更短时间)运行一次 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系统过程。
  • 如果您要自动刷新表的元数据缓存并将过时间隔时间设置为 30 分钟,那么如果缓存刷新的间隔时间较长(通常为 30 到 60 分钟),则针对该表的某些操作可能会从 Cloud Storage 读取。

如需查找元数据刷新作业的相关信息,请查询 INFORMATION_SCHEMA.JOBS 视图,如以下示例所示:

SELECT *
FROM `region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE job_id LIKE '%metadata_cache_refresh%'
AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR)
ORDER BY start_time DESC
LIMIT 10;

如需了解详情,请参阅元数据缓存

具有具体化视图的启用缓存的表

在查询存储在 Amazon S3 中的结构化数据时,您可以使用通过 Amazon Simple Storage Service (Amazon S3) 元数据缓存表创建具体化视图来提高性能和效率。这些具体化视图的功能与 BigQuery 管理的存储表的具体化视图一样,包括自动刷新智能调整的优势。

如需使具体化视图中的 Amazon S3 数据在受支持的 BigQuery 区域中可用于联接,请创建具体化视图的副本。您只能基于已获授权的具体化视图创建具体化视图副本。

限制

除了 BigLake 表的限制之外,以下限制也适用于 BigQuery Omni,其中包括基于 Amazon S3 和 Blob Storage 数据的 BigLake 表:

  • 标准版和企业 Plus 版不支持处理任何 BigQuery Omni 区域中的数据。如需详细了解版本,请参阅 BigQuery 版本简介
  • OBJECT_PRIVILEGESSTREAMING_TIMELINE_BY_*TABLE_SNAPSHOTSTABLE_STORAGEPARTITIONS INFORMATION_SCHEMA 视图不适用于基于 Amazon S3 和 Blob Storage 数据的 BigLake 表。
  • Blob Storage 不支持具体化视图。
  • JavaScript UDF 不受支持。
  • 不支持以下 SQL 语句:

  • 以下限制适用于查询和读取目标临时表(预览版):

    • 不支持使用 SELECT 语句查询目标临时表。
    • 不支持使用 BigQuery Storage Read API 从目标临时表读取数据。
    • 使用 ODBC 驱动程序时,不支持高吞吐量读取(EnableHTAPI 选项)。
  • 只有 API 或 CLI 方法支持计划查询。对于查询,已停用目标表选项。仅允许执行 EXPORT DATA 查询。

  • BigQuery Storage APIBigQuery Omni 区域中不可用。

  • 如果您的查询使用 ORDER BY 子句并且结果大小大于 256 MB,则查询会失败。如需解决此问题,请减小结果大小或从查询中移除 ORDER BY 子句。 如需详细了解 BigQuery Omni 配额,请参阅配额和限制

  • 不支持将 CMEK 与数据集和外部表搭配使用。

价格

如需了解 BigQuery Omni 中的价格和限时优惠,请参阅 BigQuery Omni 价格

配额和限制

如需了解 BigQuery Omni 配额,请参阅配额和限制

如果查询结果大于 20 GiB,请考虑将结果导出到 Amazon S3Blob Storage。 如需了解 BigQuery Connection API 的配额,请参阅 BigQuery Connection API

位置

BigQuery Omni 会在包含待查询表的数据集所在的位置处理查询。创建数据集后,该位置无法更改。 您的数据位于您自己的 AWS 或 Azure 账号中。BigQuery Omni 区域支持企业版预留和按需计算(分析)价格。如需详细了解版本,请参阅 BigQuery 版本简介
区域说明 区域名称 共置 BigQuery 区域
AWS
AWS - 美国东部(北弗吉尼亚) aws-us-east-1 us-east4
AWS - 美国西部(俄勒冈) aws-us-west-2 us-west1
AWS - 亚太地区(首尔) aws-ap-northeast-2 asia-northeast3
AWS - 欧洲(爱尔兰) aws-eu-west-1 europe-west1
Azure
Azure - 美国东部 2 azure-eastus2 us-east4

后续步骤