使用外表

外表(有时称为“联合表”),是使用 Unity Catalog 作为外部目录的一部分注册的表。 外部表包含由外部系统管理的数据和元数据,Unity Catalog添加数据治理功能以管理并查询这些表。

Azure Databricks 支持注册外表的以下方法:

  • 查询联合 使用安全的 JDBC 连接来联合到外部数据系统,例如 PostgreSQL 和 MySQL。
  • 目录联合连接外部目录,例如 Hive 数据库或 Snowflake Horizon 目录,直接查询文件存储中的数据。

重要

为了保持与旧版 Apache Spark 和 Azure Databricks 工作负载的向后兼容性,联合 Hive 元存储中的外部表将从 Hive 元存储返回元数据,包括该表是 Hive 管理表还是 Hive 外部表。

何时使用外部表

在将 Azure Databricks 与现有数据系统集成或从旧系统迁移时,外部表提供了灵活性。

许多外部表可作为一种临时解决方案,以直接访问不受 Azure Databricks 管理的数据,而无需迁移数据,也无需重构上游 ETL 工作流的代码。 Databricks 建议将用于生产工作负载或被频繁查询的数据集迁移到 Unity Catalog 托管表中。 托管表提供最佳性能,并具有许多内置优化。

查询联合是一种补充解决方案,用于从 Lakeflow Connect 不支持的外部数据系统加载数据。 Databricks 建议使用具体化视图将外表复制到 Unity Catalog。 请参阅 使用物化视图从外表加载数据

创建或写入外表

如果您拥有足够的权限,并且工作区配置了内部联合 Hive 元存储,则可以创建或写入由该内部联合 Hive 元存储支持的外部表。 外部联合 Hive metastore 和通过 Lakehouse Federation 访问的所有外部表都是只读的。

虽然外表格是只读的,但更新者字段显示出触发最新元数据刷新的用户。 当 Azure Databricks 检测到元数据过时时,会在查询时自动刷新外部表的元数据。 因此,“ 更新者” 字段显示 session_user 运行查询的人员,即使该用户未修改基础数据。

Azure Databricks 不管理向外表写入的元数据、数据或语义。 外部表可能以符合 ACID 的格式(如 Delta Lake 或 Apache Iceberg)作为底层格式,但它们并不提供 Unity Catalog 托管表所具备的事务性保证。

大多数 Azure Databricks 的优化措施,包括查询性能、写入速度增强、数据跳过以及仅元数据查询,都需要使用 Unity Catalog。 Databricks 建议使用最新的 Databricks Runtime 版本比较外表和 Unity Catalog 托管表之间的读取和写入查询性能,以评估延迟和成本差异。 请参阅 Azure Databricks for Delta Lake 和 Apache Iceberg 中的 Unity 目录托管表