适用于 Unity Catalog 表的浅表克隆
重要
在 Databricks Runtime 13.3 及更高版本中,适用于 Unity Catalog 托管表的浅表克隆支持以公共预览版提供。 在 Databricks Runtime 14.2 及更高版本中,适用于 Unity Catalog 外部表的浅表克隆支持以公共预览版提供。
可以使用浅表克隆根据现有的 Unity Catalog 表创建新的 Unity Catalog 表。 借助对 Unity Catalog 的浅表克隆支持,可以创建具有独立于其父级表的访问控制权限的表,且无需复制基础数据文件。
重要
只能将 Unity Catalog 托管表克隆到 Unity Catalog 托管表,Unity Catalog 外部表克隆到 Unity Catalog 外部表。 托管表和外部表的 VACUUM
行为不同。 请参阅 Vacuum 和 Unity Catalog 浅表克隆。
有关增量克隆的详细信息,请参阅在 Azure Databricks 上克隆表。
有关 Unity Catalog 表的详细信息,请参阅什么是表?。
在 Unity Catalog 上创建浅表克隆
可以使用适用于整个产品的浅表克隆的相同语法在 Unity Catalog 中创建浅表克隆,如以下语法示例所示:
CREATE TABLE <catalog-name>.<schema-name>.<target-table-name> SHALLOW CLONE <catalog-name>.<schema-name>.<source-table-name>
若要在 Unity Catalog 上创建浅表克隆,必须对源资源和目标资源具有足够的权限,如下表所述:
资源 | 所需的权限 |
---|---|
源表 | SELECT |
源架构 | USE SCHEMA |
源目录 | USE CATALOG |
目标架构 | USE SCHEMA , CREATE TABLE |
目标目录 | USE CATALOG |
目标外部位置(仅限外部表) | CREATE EXTERNAL TABLE |
与其他用于创建表的语句一样,创建浅表克隆的用户是目标表的所有者。 目标克隆表的所有者能以独立于源表的方式控制该表的访问权限。
注意
克隆表的所有者可以与源表的所有者不同。
查询或修改 Unity Catalog 上的浅表克隆表
重要
本部分中的说明介绍了使用共享访问模式配置的计算所需的权限。 对于“单个用户”访问模式,请参阅在“单个用户”访问模式下处理浅克隆表。
若要在 Unity Catalog 上查询浅表克隆,必须对表及包含的资源具有足够的权限,如下表所述:
资源 | 所需的权限 |
---|---|
目录 | USE CATALOG |
架构 | USE SCHEMA |
表 | SELECT |
还必须对克隆操作的目标具有 MODIFY
权限,才能完成以下操作:
- 插入记录
- 删除记录
- 更新记录
MERGE
CREATE OR REPLACE TABLE
DROP TABLE
Vacuum 和 Unity Catalog 浅克隆
重要
对于托管表,此行为在 Databricks Runtime 13.3 LTS 及更高版本的公共预览版中提供,对于外部表,此行为在 Databricks Runtime 14.2 及更高版本的公共预览版中提供。
将 Unity Catalog 表用于浅表克隆操作的源和目标时,Unity Catalog 会管理基础数据文件,以提高克隆操作的源和目标的可靠性。 在浅克隆的源上运行 VACUUM
不会破坏克隆的表。
通常,当 VACUUM
标识给定保留阈值的有效文件时,仅考虑当前表的元数据。 对 Unity Catalog 的浅克隆支持跟踪所有克隆的表与源数据文件之间的关系,因此有效文件会扩展为包含返回任何浅克隆表和源表的查询所需的数据文件。
这意味着,对于 Unity Catalog 浅克隆 VACUUM
语义,有效的数据文件是源表或任何克隆表的指定保留阈值内的任何文件。 托管表和外部表的语义略有不同。
这种对元数据的增强跟踪改变了 VACUUM
操作对支持 Delta 表的数据文件的影响,其语义如下:
- 对于托管表,针对浅表克隆操作的源或目标的
VACUUM
操作可能会从源表中删除数据文件。 - 对于外部表,
VACUUM
操作仅在针对源表运行时从源表中移除数据文件。 - 只有对源表无效的数据文件或针对源的任何浅克隆才会被删除。
- 如果针对单个源表定义了多个浅克隆,则对任何克隆表运行
VACUUM
不会删除其他克隆表的有效数据文件。
注意
Databricks 建议不要在保留期设置少于 7 天的情况下运行 VACUUM
,以避免损坏正在进行的长时间运行的事务。 如果需要以较低的保留阈值运行 VACUUM
,请确保了解 Unity Catalog 中浅克隆上的 VACUUM
与 VACUUM
和 Azure Databricks 上的其他克隆表的交互方式有何不同。 请参阅克隆 Azure Databricks 上的表。
在“单个用户”访问模式下处理浅克隆表
在“单个用户”访问模式下处理 Unity Catalog 浅克隆时,必须对克隆的表源和目标表的资源具有相应的权限。
也就是说,对于简单查询,除了对目标表具有所需的权限外,还必须对源目录和架构具有 USE
权限,并且对源表具有 SELECT
权限。 对于任何要将记录更新或插入至目标表的查询,还必须对源表具有 MODIFY
权限。
Databricks 建议使用共享访问模式在计算上处理 Unity Catalog 克隆,因为这样能让 Unity Catalog 浅表克隆目标及其源表的权限独立变换。
限制
- 外部表上的浅表克隆必须是外部表。 托管表上的浅表克隆必须是托管表。
- 不能共享使用增量共享的浅表克隆。
- 不能嵌套浅表克隆,也就是不能在浅表克隆中创建浅表克隆。
- 对于托管表,删除源表会破坏浅表克隆的目标表。
DROP TABLE
操作不会移除支持外部表的数据文件,因此外部表的浅表克隆不会因删除源而受到影响。 - Unity Catalog 允许用户在
DROP TABLE
命令后UNDROP
托管表约 7 天。 在 Databricks Runtime 13.3 LTS 及更高版本中,基于已删除托管表的托管浅表克隆在此 7 天内继续工作。 如果不在此窗口中UNDROP
源表,则一旦源表的数据文件被垃圾回收,浅克隆将停止运行。