使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

外部表

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

BigLake 表和外部表类似于标准 BigQuery 表,因为这些表会将其元数据和架构存储在 BigQuery 存储空间中。但是,其数据位于外部来源中。

这些表可以是临时表,也可以是永久表。永久 BigLake 和外部表包含在数据集中,并以与管理标准 BigQuery 表相同的方式进行管理。例如,您可以查看表的属性设置访问权限控制等等。您可以查询这些表,并将其与其他表相联接。

BigLake 表扩展了具有精细安全性的外部表,包括行级列级动态数据遮盖

您可以将 BigLake 表和外部表与以下数据源搭配使用:

外部表限制

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

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

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

  • 您无法运行从外部表导出数据的 BigQuery 作业。

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

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

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

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

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

  • 使用外部表的联合查询的试运行可能会报告 0 字节数据的下限,即使返回行也是如此。这是因为在实际查询完成之前,无法确定从外部表处理的数据量。运行联合查询仍会产生处理此数据的费用。

位置注意事项

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

  • 使用外部数据源时,共置 BigQuery 数据集。
    • Cloud Storage:通过 BigQuery 外部表查询 Cloud Storage 中的数据时,您查询的数据必须与 BigQuery 数据集位于同一位置。例如:
      • 单区域:如果您的 BigQuery 数据集位于华沙(“europe-central2”)区域,则相应的 Cloud Storage 存储桶也必须位于华沙区域,因为目前没有包含华沙的 Cloud Storage 双区域。
      • 双区域:如果您的 BigQuery 数据集位于东京(“asia-northeast1”)区域,则相应的 Cloud Storage 存储桶必须是位于东京区域或“ASIA1”双区域(包含东京)的存储桶。
      • 多区域:由于外部查询性能取决于最短延迟时间和最佳网络带宽,因此建议将包含多区域 Cloud Storage 存储桶的多区域数据集位置用于外部表。
      查看支持的 Cloud Storage 位置
    • Cloud Bigtable:通过 BigQuery 外部表查询 Cloud Bigtable 中的数据时,您的 Cloud Bigtable 实例必须位于 BigQuery 数据集所在的相同位置。
      • 单区域:如果您的 BigQuery 数据集位于比利时 (europe-west1) 单区域位置,则相应的 Cloud Bigtable 实例必须位于比利时区域。
      • 多区域:因为外部查询性能取决于最小延迟时间和最佳网络带宽,所以建议对 Cloud Bigtable 上的外部表使用多区域数据集位置。
      查看支持的 Cloud Bigtable 位置
    • Google 云端硬盘:位置注意事项不适用于 Google 云端硬盘外部数据源。
  • 制定数据管理计划。
    • 如果您选择区域存储资源(如 BigQuery 数据集或 Cloud Storage 存储分区),请制定按地理位置管理数据的计划。

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

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

  1. 数据从 BigQuery 表导出到数据集所在位置中的 Cloud Storage 存储桶或数据集内某个位置中的 Cloud Storage 存储桶。例如,如果您的数据集位于“EU”多区域位置,则可以将数据导出到位于欧盟的“europe-west1”比利时位置。

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

  2. 将数据从导出 Cloud Storage 存储桶复制或移动到您在目标位置创建的新存储桶。例如,如果要将数据从“US”多区域移动到“asia-northeast1”东京区域,则需要将数据转移到您在东京创建的存储桶。如需了解如何转移 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 查询外部表时,您需要为运行查询付费。

如果您的数据以 ORC 或 Parquet 格式存储在 Cloud Storage 中,请参阅数据大小计算

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

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

后续步骤