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

如何解决跨DLT流水线调用Streaming Live Table的权限问题?

解决DLT跨流水线访问Streaming Live Table的权限问题

核心问题分析

权限报错源于两个关键问题:一是DLT默认创建的Live Table为私有资源,其他流水线无访问权限;二是流水线B中LIVE.customers的引用指向自身流水线的Schema,而非流水线A的目标表。


具体修复步骤

1. 配置流水线A的表访问权限

修改流水线A的customers表定义,通过TBLPROPERTIES明确授权流水线B访问:

CREATE OR REFRESH STREAMING LIVE TABLE customers
TBLPROPERTIES (
  -- 填入流水线B的ID(可在流水线详情页获取),多流水线用逗号分隔
  'pipelines.allow' = 'dlt-pipeline-b-xxxxxx'
  -- 测试环境可临时用'*'允许所有流水线访问,生产环境务必指定具体ID
) AS
-- 你的原数据查询逻辑

2. 修正流水线B的表引用路径

流水线B的LIVE关键字仅指向自身流水线的默认Schema,必须替换为流水线A的表完整路径:

CREATE OR REFRESH STREAMING LIVE TABLE sales AS
SELECT * 
FROM source a
INNER JOIN STREAM(<流水线A的Catalog名>.<流水线A的Schema名>.customers) c
ON a.customer_id = c.customer_id -- 补充JOIN关联条件,原SQL缺失此必要部分

3. 给流水线B的执行主体分配基础权限

在Databricks权限管理中,为流水线B的服务主体(或执行账户)分配以下权限:

-- 授权访问流水线A所在Catalog
GRANT USE CATALOG ON CATALOG <流水线A的Catalog名> TO `service-principal:<流水线B的SP-ID>`;
-- 授权访问流水线A所在Schema
GRANT USE SCHEMA ON SCHEMA <流水线A的Schema名> TO `service-principal:<流水线B的SP-ID>`;
-- 授权customers表的SELECT权限
GRANT SELECT ON TABLE <流水线A的Catalog名>.<流水线A的Schema名>.customers TO `service-principal:<流水线B的SP-ID>`;

4. 验证外部存储权限(若适用)

如果流水线A的customers表数据存储在外部云存储(如S3/ADLS),需确保流水线B的服务主体拥有该存储路径的读权限(通过IAM/RBAC配置)。


验证流程

  1. 在Databricks SQL中切换到流水线B的服务主体身份,执行SELECT * FROM <流水线A的Catalog>.<流水线A的Schema>.customers,确认能正常返回数据。
  2. 重启流水线A使权限配置生效,再启动流水线B即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:45:49