外部数据源简介

本页面简要介绍了如何查询存储在 BigQuery 外部的数据。

概览

外部数据源(也称为“联合数据源”)是可供直接查询的数据源,即使数据未存储在 BigQuery 中也是如此。您不用加载或流式传输数据,只需创建一个引用外部数据源的表即可。

BigQuery 支持直接查询以下各项中的数据:

支持的格式包括:

  • Avro
  • CSV
  • JSON(仅限换行符分隔格式)
  • ORC
  • Parquet

外部数据源的使用场景包括:

  • 从外部数据源(BigQuery 以外的位置)查询数据并将清理后的结果写入 BigQuery 存储,从而实现一次性加载和清理数据。
  • 拥有与其他表连接且频繁更改的少量数据。由于频繁更改的数据采用外部数据源的形式,因此不需要在每次更新这些数据时重新加载它们。

外部数据源限制

外部数据源包含如下限制:

  • BigQuery 不保证外部数据源的数据一致性。在查询运行的过程中,基础数据的更改可能会导致意外行为。
  • 外部数据源的查询性能可能低于原生 BigQuery 表中的数据查询性能。如果需要优先考虑查询速度,请将数据加载到 BigQuery 中,而不是设置外部数据源。如果查询包含外部数据源,则其性能取决于外部存储类型。例如,查询存储在 Cloud Storage 中的数据比查询存储在 Google 云端硬盘中的数据速度更快。总体而言,外部数据源的查询性能与直接从外部存储读取数据相当。
  • 您不能使用 TableDataList JSON API 方法从驻留在外部数据源中的表内检索数据。如需了解详情,请参阅 tabledata.list

    若要绕过此限制,您可以将查询结果保存在目标表中。随后,您可以在结果表上使用 TableDataList 方法。

  • 您不能运行从外部数据源导出数据的 BigQuery 作业。

    若要绕过此限制,您可以将查询结果保存在目标表中。随后,您可以针对结果表运行导出作业。

  • 您不能在通配符表查询中引用外部数据源。

  • 外部数据源以有限的方式支持表分区或聚簇。如需了解详情,请参阅查询外部分区数据

  • 查询外部数据源时,系统不会缓存结果。即使您多次发出相同的查询,也需要为针对外部表发出的每条查询付费。如果您需要对某个不常更改的外部表反复发出查询,可以考虑将查询结果写入永久表,并改为对该永久表运行查询。

  • 目前只有以下区域和地区支持查询 Cloud Bigtable 中的数据:
    区域 地区
    us-central1

    us-central1-a

    us-central1-b

    us-central1-c

    us-central1-f

    europe-west1

    europe-west1-b

    europe-west1-c

    europe-west1-d

  • 您最多只能对 Cloud Bigtable 外部数据源执行 4 项并发查询。

位置注意事项

在选择数据的位置时,请考虑以下事项:

  • 共置 BigQuery 数据集和外部数据源。
    • 在 Cloud Storage 等外部数据源中查询数据时,查询的数据必须与 BigQuery 数据集位于相同位置。例如,如果您的 BigQuery 数据集位于欧盟多区域位置,则包含您要查询的数据的 Cloud Storage 存储分区必须位于欧盟的某个多区域存储分区中。如果您的数据集位于美国多区域位置,则您的 Cloud Storage 存储分区必须位于美国的某个多区域存储分区中。
    • 如果您的数据集位于单区域位置,则包含您要查询的数据的 Cloud Storage 存储分区必须位于同一位置的单区域存储分区中。例如,如果您的数据集位于东京区域,则您的 Cloud Storage 存储分区必须是位于东京的单区域存储分区。
    • 如果外部数据集位于 Cloud Bigtable 中,则您的数据集必须位于 US 或 EU 多区域位置。您的 Cloud Bigtable 数据必须位于受支持的 Cloud Bigtable 位置之一。
    • 位置注意事项不适用于 Google 云端硬盘外部数据源。
  • 制定数据管理计划。
    • 如果您选择的是单区域存储资源(如 BigQuery 数据集或 Cloud Storage 存储分区),请制定按地理位置管理数据的计划。

如需详细了解 Cloud Storage 位置,请参阅 Cloud Storage 文档中的存储分区位置

如需手动将数据集从一个位置移动到另一个位置,请按照以下流程操作:

  1. 将数据从 BigQuery 表导出到数据集所在位置的单区域或多区域 Cloud Storage 存储分区中。例如,如果您的数据集位于欧盟多区域位置,请将您的数据导出到位于欧盟的单区域或多区域存储分区中。

    从 BigQuery 导出数据不会产生费用,但是将导出的数据存储在 Cloud Storage 中会产生费用。BigQuery 导出操作需要遵循导出作业的相关限制。

  2. 将数据从 Cloud Storage 存储分区复制或移动到新位置的单区域或多区域存储分区中。例如,如果要将数据从美国多区域位置移动到东京单区域位置,则需要将数据转移到位于东京的单区域存储分区。如需了解如何转移 Cloud Storage 对象,请参阅 Cloud Storage 文档中的重命名、复制和移动对象

    请注意,在不同区域之间转移数据会在 Cloud Storage 中产生网络出站流量费用

  3. 将数据转移到新位置的 Cloud Storage 存储分区后,(在新位置)创建一个新的 BigQuery 数据集。然后,将数据从 Cloud Storage 存储分区加载到 BigQuery 中。

    将数据加载到 BigQuery 时,您无需为此操作支付费用,但在删除数据或存储分区之前,您需要支付在 Cloud Storage 中存储数据的费用。数据加载完毕后,在 BigQuery 中存储数据也须支付费用。将数据加载到 BigQuery 需要遵循加载作业的相关限制。

您还可以使用 Cloud Composer 以编程方式移动和复制大型数据集。

如需详细了解如何使用 Cloud Storage 存储和移动大型数据集,请参阅使用 Cloud Storage 处理大数据

外部数据源价格

从 BigQuery 查询外部数据源时,您需要为查询读取的字节数付费。如需了解详情,请参阅查询价格查询 Cloud Storage 中所存储数据的价格

如果您的数据以 ORC 或 Parquet 格式存储在 Cloud Storage 中,请参阅查询 Cloud Storage 中的列式格式

根据应用的价格指南,您还需要为源应用所用的数据和任何资源支付存储费用:

  • 如需了解 Cloud Storage 价格,请参阅 Cloud Storage 价格
  • 如需了解 Cloud Bigtable 价格,请参阅价格
  • 如需了解 Google 云端硬盘价格,请参阅价格

后续步骤