将 Unity 目录中注册 的用户定义函数(UDF) 添加为 Databricks 应用资源,使应用能够执行已注册的 SQL 和 Python 函数。 UDF 提供可重用的业务逻辑、数据转换和自定义操作,这些操作可以通过集中治理在整个组织中共享。
特权要求
若要运行 UDF,应用的服务主体必须在父目录上具有USE CATALOG特权,在父架构上具有USE SCHEMA特权,并在函数上具有EXECUTE特权。 添加 UDF 资源时,Azure Databricks 会自动向应用的服务主体授予这些权限。
要使此自动授予成功,对于每个权限,以下条件之一必须为真:
-
对于
USE CATALOG: 所有帐户用户都对目录具有USE CATALOG权限,或者你对目录具有MANAGE特权。 -
对于
USE SCHEMA: 所有帐户用户都对架构具有USE SCHEMA权限,或者你对架构拥有MANAGE权限。 -
对于
EXECUTE: 所有帐户用户都对函数具有EXECUTE权限,或者你对函数拥有MANAGE权限。
添加用户定义的函数 (UDF) 资源
将 UDF 添加为资源之前,请查看 应用资源先决条件。
- 创建或编辑应用时,导航到 “配置” 步骤。
- 在 “应用资源 ”部分中,单击“ + 添加资源”。
- 选择 UC 函数 作为资源类型。
- 从工作区中的可用函数中选择 UDF。 必须在 Unity 目录中注册该函数。
- 选择应用的权限级别:
-
可以执行: 授予应用使用提供的参数执行 UDF 的权限。 对应于
EXECUTE特权。
-
可以执行: 授予应用使用提供的参数执行 UDF 的权限。 对应于
- (可选)指定自定义资源密钥,即在应用配置中引用 UDF 的方式。 默认键为
function.
环境变量
使用 UDF 资源部署应用时,Azure Databricks 会通过可以使用该字段引用的 valueFrom 环境变量公开完整的三级名称。
示例配置:
env:
- name: UC_FUNCTION_NAME
valueFrom: function # Use your custom resource key if different
在应用程序中使用该函数:
import os
from databricks.sdk import WorkspaceClient
# Access the function name
function_name = os.getenv("UC_FUNCTION_NAME")
# Initialize workspace client
w = WorkspaceClient()
# Execute the function via SQL
result = w.statement_execution.execute_statement(
warehouse_id="your_warehouse_id",
statement=f"SELECT {function_name}('parameter_value')"
)
# Process the result
print(f"Function result: {result}")
有关详细信息,请参阅 使用环境变量访问资源。
删除用户定义的函数 (UDF) 资源
从应用中删除 UDF 资源时,应用的服务主体将失去对函数的访问权限。 UDF 本身保持不变,并继续可供具有适当权限的其他用户和应用程序使用。
最佳做法
使用 UDF 资源时,请考虑以下事项:
- 请确保用户定义函数 (UDF) 有详细的记录,包括清晰的参数描述和返回类型。
- 在应用代码中正常处理 UDF 错误,包括参数验证和异常处理。
- 在部署之前在应用上下文中测试 UDF 行为,以验证预期结果。
- 规划应用权限时,请考虑对基础表或数据源的 UDF 依赖关系。