You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Unity Catalog中创建的表必须添加必填标签?

在Unity Catalog中强制表添加必填标签的实现方案

一、先定义必填的表级自定义属性

首先在Unity Catalog中创建需要强制的表级自定义属性(也就是你说的标签),比如business_unit、data_classification这类必填项:

  • CLI操作示例:
    databricks unity-catalog custom-properties create --name business_unit --type STRING --entity-type TABLE --description "必填业务单元标签"
    databricks unity-catalog custom-properties create --name data_classification --type STRING --entity-type TABLE --description "必填数据分类标签"
    
  • UI操作:进入Unity Catalog的「自定义属性」页面,选择「表」作为实体类型,添加对应属性并补充描述。

二、创建表创建的强制策略

利用Unity Catalog的**策略(Policies)**拦截不符合要求的表创建操作,规则基于SQL语法编写:

  1. 核心策略规则示例(强制必须包含指定自定义属性):
    ALLOW CREATE TABLE, REPLACE TABLE ON *.*.*
    WHEN EXISTS(custom_properties.business_unit) AND EXISTS(custom_properties.data_classification)
    
    这条规则的作用是:仅允许在所有目录、架构下创建/替换表,当表的自定义属性中同时存在business_unit和data_classification时才放行。
  2. 创建策略的方式:
    • CLI操作:
      databricks unity-catalog policies create --name "强制表必填标签" --description "所有表必须带有business_unit和data_classification自定义属性" --definition "ALLOW CREATE TABLE, REPLACE TABLE ON *.*.* WHEN EXISTS(custom_properties.business_unit) AND EXISTS(custom_properties.data_classification)"
      
    • UI操作:进入Unity Catalog的「策略」页面,新建策略,目标对象选择「表」,输入上述规则定义。

三、将策略应用到目标范围

把创建好的策略分配到需要生效的范围:

  • 如果要全局强制所有表,就将策略应用到*.*.*(所有目录、架构、表);
  • 如果只针对特定目录/架构,替换为对应的路径(比如my_catalog.my_schema.*);
  • 注意调整策略优先级,确保这条强制规则的优先级高于其他允许创建表的策略,避免被覆盖。

四、验证效果

  • 尝试创建不带必填属性的表,会触发权限错误:
    CREATE TABLE test_db.test_table (id INT);
    
  • 创建带必填属性的表,操作会成功:
    CREATE TABLE test_db.test_table (id INT)
    TBLPROPERTIES (
      'business_unit' = 'sales',
      'data_classification' = 'public'
    );
    

进阶调整

如果需要更严格的校验,比如限制属性值的可选范围,可以修改策略规则:

ALLOW CREATE TABLE, REPLACE TABLE ON *.*.*
WHEN EXISTS(custom_properties.business_unit) 
AND custom_properties.data_classification IN ('public', 'internal', 'confidential')

如果需要给管理员开例外,也可以添加规则:

ALLOW CREATE TABLE, REPLACE TABLE ON *.*.*
WHEN EXISTS(custom_properties.business_unit) AND EXISTS(custom_properties.data_classification)
OR is_account_group_member('account admins')

内容的提问来源于stack exchange,提问作者user25060582

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:09:53