MaxCompute 推出外部项目,通过映射DLF catalog实现元数据与数据的实时访问,委托DLF管理权限,支持对DLF全包OSS上数据的元数据访问和读写。该方式支持在catalog级别整体映射数据湖,实现基于Paimon的跨引擎协同。目前Paimon_DLF外部项目处于邀测阶段。
目前Paimon_DLF外部项目属于邀测阶段,可通过搜索(钉钉群号:11782920)加入MaxCompute开发者社区钉群与我们沟通交流。
适用范围
只支持Paimon格式表。
不支持写入Dynamic Bucket表。
不支持写入Cross Partition表。
操作步骤
步骤一:授权
为RAM用户授权
如果操作用户是RAM用户,请确保已绑定如下权限策略。添加权限参考为为RAM用户授权。
AliyunRAMFullAccess:如果RAM用户没有此权限,需要主账号来完成授权。
AliyunMaxComputeFullAccess:用来完成创建外部数据源和外部项目操作。
AliyunDLFReadOnlyAccess:用来完成创建外部项目操作。因创建Paimon_DLF外部项目需要有DLF catalog的List权限,故需要此权限策略。
授权并开通DLF
将DLF数据权限赋予MaxCompute的访问账号
MaxCompute通过外部数据源和外部项目访问Paimon_DLF的数据,需要先将DLF的数据相关权限赋予MaxCompute的访问账号。
【使用任务执行者身份】本质是授予MaxCompute服务关联角色访问DLF的权限,通过MaxCompute访问DLF时,需要向DLF传递当前任务执行者身份,MaxCompute和 DLF同时将当前任务执行者限制在两个产品各自的权限范围内,因此需要先为MaxCompute创建服务关联角色并授权。步骤如下:
登录RAM访问控制台,在左侧导航栏选择 ,单击右侧创建角色。
在创建角色页面,单击创建服务关联角色。
在信任的云服务中选择AliyunServiceRoleForMaxComputeLakehouse,单击创建服务关联角色。若提示角色已经存在,说明已经授权过,忽略即可。
权限说明
步骤二:创建Paimon_DLF外部数据源
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择管理配置 > 外部数据源。
在外部数据源页面,单击创建外部数据源。
在新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:
参数
是否必填
说明
外部数据源类型
必填
选择Paimon_DLF。
外部数据源名称
必填
可自定义命名。命名规则如下:
以字母开头,且只能包含小写字母、下划线和数字。
不能超过128个字符。
外部数据源描述
选填
根据需要填写。
地域
必填
默认为当前地域。
认证和鉴权
必填
默认为任务执行者身份。
关联服务角色
必填
acs:ram::<uid>:role/aliyunserviceroleformaxcomputelakehouse
Endpoint
必填
例如
cn-hangzhou-intranet.dlf.aliyuncs.com
。单击确认,完成外部数据源的创建。
在外部数据源页面,单击数据源操作列的详情可查看数据源详细信息。
步骤三:创建外部项目
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择管理配置 > 项目管理。
在项目管理页面,单击外部项目页签,然后单击新建项目。
在新增项目对话框,根据界面提示配置参数。参数说明如下:
参数
是否必填
说明
项目类型
必填
默认为外部项目。
地域
必填
默认为当前地域,此处无法修改。
项目名称(全网唯一)
必填
字母开头,包含字母、数字及下划线(_),长度在3-28个字符。
MaxCompute外部数据源类型
选填
默认为Paimon_DLF。
MaxCompute外部数据源
选填
选择已有:会出现已经创建过的外部数据源。
新建外部数据源:即可新建并使用新的外部数据源。
MaxCompute外部数据源名称
必填
选择已有:在下拉列表中选择已经创建好的外部数据源名称。
新建外部数据源:则会使用新建的外部数据源名称。
认证和鉴权
必填
任务执行者身份,如未创建服务关联角色,需要先创建才可以使用此模式。
关联服务角色
必填
默认生成。
Endpoint
必填
默认生成。
数据目录
必填
在DLF中创建的数据目录,数据目录创建方法请参见新建数据目录。
计算资源付费类型
必填
包年包月或按量付费。
默认Quota
必填
选择已有Quota.
描述
选填
自定义项目描述。
单击确认,完成项目创建。
步骤四:使用SQL访问数据源系统
选择连接工具登录外部项目。
MaxCompute控制台SQL分析
模块
说明
环境要求
推荐使用最新版谷歌浏览器。
操作入口
登录MaxCompute控制台,在左侧导航栏选择 。
操作指引
DataWorks数据开发方式
模块
说明
环境要求
推荐使用最新版谷歌浏览器。
操作指引
列出外部项目中的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>
使用示例:
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用户授权。