外部数据源简介

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

概览

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

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

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

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

外部数据源的限制

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

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

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

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

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

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

  • 目前,您不能查询以 Parquet 或 ORC 格式存储的外部数据。

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

  • 目前只有以下区域和地区支持查询 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 数据集位于 EU 多区域位置,则包含您要查询的数据的 Cloud Storage 存储分区必须位于 EU 的多区域存储分区中。如果您的数据集位于 US 多区域位置,则 Cloud Storage 存储分区必须位于 US 的多区域存储分区中。
    • 如果您的数据集位于区域位置,则包含您要查询的数据的 Cloud Storage 存储分区必须位于同一位置的区域存储分区中。例如,如果您的数据集位于东京区域,则您的 Cloud Storage 存储分区必须是位于东京的区域存储分区。
    • 如果外部数据集位于 Cloud Bigtable 中,则您的数据集必须位于 US 或 EU 多区域位置。您的 Cloud Bigtable 数据必须位于受支持的 Cloud Bigtable 位置之一。
    • 位置注意事项不适用于 Google 云端硬盘外部数据源。
  • 制定数据管理计划。
    • 如果您选择区域存储资源(如 BigQuery 数据集或 Cloud Storage 存储分区),请制定按地理位置管理数据的计划。

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

在不同位置之间移动 BigQuery 数据

您无法在创建数据集后更改其位置。此外,您也无法将数据集从一个位置移动到另一个位置。如果需要将数据集从一个位置移动到另一个位置,请按以下流程操作:

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

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

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

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

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

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

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

外部数据源配额

外部数据源的限制与加载作业的限制相同,如“配额和限制”页面的加载作业部分所述。

外部数据源价格

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

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

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

后续步骤

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

发送以下问题的反馈:

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