MaxCompute 推出外部项目,通过映射DLF catalog实现元数据与数据的实时访问,委托DLF管理权限,支持对DLF全托管OSS上数据的元数据访问和读写。该方式支持在catalog级别整体映射数据湖,实现基于Paimon的跨引擎协同。目前Paimon_DLF外部项目处于邀测阶段。
适用范围
只支持DLF全托管OSS上存储的Paimon格式表。
不支持写入Dynamic Bucket表。
不支持写入Cross Partition表。
操作步骤
步骤一:授权
为RAM用户授权
如果操作用户是RAM用户,请确保已绑定如下权限策略。添加权限参考为为RAM用户授权。
AliyunRAMFullAccess:如果RAM用户没有此权限,需要主账号来完成授权。
AliyunMaxComputeFullAccess:用来完成创建外部数据源和外部项目操作。
AliyunDLFReadOnlyAccess:用来完成创建外部项目操作。因创建Paimon_DLF外部项目需要有DLF catalog的List权限,故需要此权限策略。
授权并开通DLF
云资源访问授权
首次使用DLF时,要完成自动化授权操作,确保DLF能够正常访问相关云资源。
登录数据湖构建(DLF)控制台,在左上角选择地域。
在云资源访问授权右侧,单击授权。
开通数据湖构建
选定地域,MaxCompute和DLF必须部署在同一地域。使用DLF前,需要先完成开通操作,确保服务在目标地域的可用性。
在开通数据湖构建右侧,单击开通。
将DLF数据权限赋予MaxCompute的访问账号
MaxCompute通过外部数据源和外部项目访问Paimon_DLF的数据,需要先将DLF的数据相关权限赋予MaxCompute的访问账号。
【使用任务执行者身份】本质是授予MaxCompute服务关联角色访问DLF的权限,通过MaxCompute访问DLF时,需要向DLF传递当前任务执行者身份,MaxCompute和 DLF同时将当前任务执行者限制在两个产品各自的权限范围内,因此需要先为MaxCompute创建服务关联角色并授权。步骤如下:
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击创建角色。
在创建角色页面的右上角,单击创建服务关联角色。
在创建服务关联角色页面,选择信任的云服务
AliyunServiceRoleForMaxComputeLakehouse,单击创建服务关联角色。若提示角色已经存在,说明已经授权过,忽略即可。
权限说明
步骤二:创建Paimon_DLF外部数据源
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在外部数据源页面,单击创建外部数据源。
在弹出的新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:
参数
是否必填
说明
外部数据源类型
必填
选择Paimon_DLF。
外部数据源名称
必填
可自定义命名。命名规则如下:
以字母开头,且只能包含小写字母、下划线和数字。
不能超过128个字符。
例如
paimon_dlf。外部数据源描述
选填
根据需要填写。
地域
必填
默认为当前地域。
认证和鉴权
必填
默认为阿里云RAM角色。
关联服务角色
必填
默认生成。
Endpoint
必填
自动生成,杭州地域为:
cn-hangzhou-intranet.dlf.aliyuncs.com外部数据源补充属性
选填
特殊声明的外部数据源补充属性。指定后,使用此外部数据源的任务可以按照参数定义的行为访问源系统。
说明支持的具体参数请关注后续官网文档更新说明,具体参数将随产品能力演进逐步放开。
单击确认,完成外部数据源的创建。
在外部数据源页面,单击目标数据源对应的操作的详情,可查看数据源详细信息。
步骤三:创建外部项目
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择。
在外部项目页签,单击新建项目。
在弹出的新增项目对话框,根据界面提示文案配置项目信息,单击确认完成项目创建。
参数
是否必填
说明
项目类型
必填
默认为外部项目。
地域
必填
默认为当前地域,此处无法修改。
项目名称(全网唯一)
必填
字母开头,包含字母、数字及下划线(_),长度在3-28个字符。
MaxCompute外部数据源类型
选填
默认为Paimon_DLF。
MaxCompute外部数据源
选填
选择已有:会出现已经创建过的外部数据源。
新建外部数据源:即可新建并使用新的外部数据源。
MaxCompute外部数据源名称
必填
选择已有:在下拉列表中选择已经创建好的外部数据源名称。
新建外部数据源:则会使用新建的外部数据源名称。
数据目录
必填
DLF数据目录。
计算资源付费类型
必填
包年包月或按量付费。
默认Quota
必填
选择已有Quota.
描述
选填
自定义项目描述。
步骤四:使用SQL访问数据源系统
选择连接工具登录外部项目。
列出外部项目中的schema。
-- 打开session级别支持schema语法开关。 SET odps.namespace.schema=true; SHOW schemas; -- 示例返回结果。 ID = 20250919****am4qb default system OK在外部项目中列出schema下的表。
-- schema_name为外部项目中show出来的Schema名称。 USE schema <schema_name>; SHOW tables; -- 返回结果。 ID = 20250919****am4qb acs:ram::<uid>:root emp OK在外部项目中新建schema。
-- 本示例中schema_name为schema_demo_test。 CREATE schema <schema_name>;使用新建的schema。
USE schema <schema_name>;在schema中新建表并插入数据。
如果是RAM用户登录,此操作需要有DLF Catalog的操作权限,授权操作见数据授权管理。
命令格式:
-- 新建表。 CREATE TABLE [IF NOT EXISTS] <table_name> ( <col_name> <data_type>, ... ) [COMMENT <table_comment>] [PARTITIONED BY (<col_name> <data_type>, ...)] ; -- 插入数据。 INSERT {INTO|OVERWRITE} TABLE <table_name> [PARTITION (<pt_spec>)] [(<col_name> [,<col_name> ...)]] <select_statement> FROM <from_statement>使用示例:
说明针对Paimon源表TIMESTAMP低精度类型,在写入时会截断处理。0~3按照3位截断,4~6按照6位截断,7~9按照9位截断。
CREATE TABLE schema_table(id int,name string); INSERT INTO schema_table VALUES (101,'张三'),(102,'李四'); -- 查询表schema_table。 SELECT * FROM schema_table; -- 返回结果。 +------------+------------+ | id | name | +------------+------------+ | 101 | 张三 | | 102 | 李四 | +------------+------------+
切换为已有的default schema。
use schema default; SHOW tables; -- 返回结果示例。 ID = 20250919*******yg5 acs:ram::<uid>:root emp acs:ram::<uid>:root emp_detail acs:ram::<uid>:root test_table OK -- 读取表。 SELECT * FROM test_table; -- 返回结果。 +------------+------------+ | id | name | +------------+------------+ | 101 | 张三 | | 102 | 李四 | +------------+------------+ -- 写入表并查询写入是否成功。 INSERT INTO test_table VALUES (103,'王五'); SELECT * FROM test_table; -- 返回结果。 +------------+------------+ | id | name | +------------+------------+ | 101 | 张三 | | 102 | 李四 | | 103 | 王五 | +------------+------------+
常见报错
问题一:点击新建外部项目报错
问题描述:在新建外部项目时提示错误:“You are not authorized to perform this action.”

解决方案:
如果是RAM用户,首先确认已经赋予RAM用户
AliyunMaxComputeFullAccess权限,详情见操作步骤一。由于该入口会选择到DLF的catalog,确认已经授予DLF相关操作权限,详情见操作步骤一。
问题二:在外部项目的default schema下执行show tables报错
问题描述:外部项目的default schema下执行show tables,提示错误:“
Forbidden:User acs: ram: :<uid>:user/** doesn't have privilege LIST on DATABASE
default”。
解决方案:
登录DLF控制台,单击左侧导航栏系统和安全,在访问控制页签,刷新查看当前RAM是否存在。
如果存在,单击角色,给 RAM用户授权。