Paimon_DLF外部项目(邀测)

更新时间:
复制为 MD 格式

MaxCompute 推出外部项目,通过映射DLF catalog实现元数据与数据的实时访问,委托DLF管理权限,支持对DLF全托管OSS上数据的元数据访问和读写。该方式支持在catalog级别整体映射数据湖,实现基于Paimon的跨引擎协同。目前Paimon_DLF外部项目处于邀测阶段。

适用范围

  • 只支持DLF全托管OSS上存储的Paimon格式表。

  • 不支持以INSERT INTO/OVERWRITE方式写入Dynamic Bucket表和Cross Partition表。

  • SHOW TABLES操作不支持固定bucket且主键不包含分区键的Cross Partition表。

  • 外部项目的表不支持schema evolution操作、分区操作。

  • 不支持资源、函数操作。

  • 不支持作为DataWorks数据集成的数据源传输数据。

数据类型映射

MaxCompute数据类型请参见1.0数据类型版本2.0数据类型版本

开源Paimon数据类型

MaxCompute 2.0数据类型

是否支持读写

说明

TINYINT

TINYINT

已开通

8位有符号整型。

SMALLINT

SMALLINT

已开通

16位有符号整型。

INT

INT

已开通

32位有符号整型。

BIGINT

BIGINT

已开通

64位有符号整型。

BINARY(MAX_LENGTH)

BINARY

已开通

二进制数据类型,目前长度限制为8 MB。

FLOAT

FLOAT

已开通

32位二进制浮点型。

DOUBLE

DOUBLE

已开通

64位二进制浮点型。

DECIMAL(precision,scale)

DECIMAL(precision,scale)

已开通

10进制精确数字类型。,默认为decimal(38,18)。允许自定义precisionscale值。

  • precision:表示最多可以表示多少位的数字。默认取值范围:1 <= precision <= 38

  • scale:表示小数部分的位数。默认取值范围: 0 <= scale <= 18

VARCHAR(n)

VARCHAR(n)

已开通

变长字符类型。n为长度,[1,65535]。

CHAR(n)

CHAR(n)

已开通

固定长度字符类型。n为长度,[1,255]。

VARCHAR(MAX_LENGTH)

STRING

已开通

字符串类型目前长度限制为8MB。

DATE

DATE

已开通

日期类型格式为yyyy-mm-dd

TIME、TIME(p)

不支持

未开通

Paimon数据类型TIME,不带时区的时间类型,由时分秒组成,精度可到纳秒。

TIME(p)表示小数位的精度,0-9之间,默认为0。

MaxCompute侧没有映射的类型。

TIMESTAMP、TIMESTAMP(p)

TIMESTAMP_NTZ

已开通

无时区时间戳类型,精确到纳秒。

读表需打开Native开关SET odps.sql.common.table.jni.disable.native=true;

TIMESTAMP WITH LOCAL TIME_ZONE(9)

TIMESTAMP

已开通

  • 时间戳类型,精确到纳秒格式为yyyy-mm-dd hh:mm:ss.xxxxxxxxx

  • 针对Paimon源表TIMESTAMP低精度类型,在写入时会截断处理。0~3按照3位截断,4~6按照6位截断,7~9按照9位截断。

TIMESTAMP WITH LOCAL TIME_ZONE(9)

DATETIME

未开通

时间戳类型,精确到纳秒

格式为yyyy-mm-dd hh:mm:ss.xxxxxxxxx

BOOLEAN

BOOLEAN

已开通

BOOLEAN类型。

ARRAY

ARRAY

已开通

复杂类型。

MAP

MAP

已开通

复杂类型。

ROW

STRUCT

已开通

复杂类型。

MULTISET<t>

不支持

未开通

MaxCompute侧没有映射的类型。

VARBINARY、VARBINARY(n)、BYTES

BINARY

已开通

可变长度二进制字符串的数据类型。

操作步骤

步骤一:授权

RAM用户授权

如果操作用户是RAM用户,请确保已绑定如下权限策略。添加权限参考为RAM用户授权

  • AliyunRAMFullAccess:如果RAM用户没有此权限,需要主账号来完成授权。

  • AliyunMaxComputeFullAccess:用来完成创建外部数据源和外部项目操作。

  • AliyunDLFReadOnlyAccess:用来完成创建外部项目操作。因创建Paimon_DLF外部项目需要有DLF catalogList权限,故需要此权限策略。

授权并开通DLF

  1. 云资源访问授权

    首次使用DLF时,要完成自动化授权操作,确保DLF能够正常访问相关云资源。

    登录数据湖构建(DLF)控制台,在左上角选择地域。

    云资源访问授权右侧,单击授权

  2. 开通数据湖构建

    选定地域,MaxComputeDLF必须部署在同一地域。使用DLF前,需要先完成开通操作,确保服务在目标地域的可用性。

    开通数据湖构建右侧,单击开通

DLF数据权限赋予MaxCompute的访问账号

MaxCompute通过外部数据源和外部项目访问Paimon_DLF的数据,需要先将DLF的数据相关权限赋予MaxCompute的访问账号。

【使用任务执行者身份】本质是授予MaxCompute服务关联角色访问DLF的权限,通过MaxCompute访问DLF时,需要向DLF传递当前任务执行者身份,MaxCompute和 DLF同时将当前任务执行者限制在两个产品各自的权限范围内,因此需要先为MaxCompute创建服务关联角色并授权。步骤如下:

  1. 登录RAM控制台

  2. 在左侧导航栏选择身份管理 > 角色

  3. 角色页面,单击创建角色

  4. 创建角色页面的右上角,单击创建服务关联角色

  5. 创建服务关联角色页面,选择信任的云服务AliyunServiceRoleForMaxComputeLakehouse,单击创建服务关联角色

    若提示角色已经存在,说明已经授权过,忽略即可。

权限说明

  • 管控面权限:即通过MaxCompute控制台操作时需要校验的权限,主要发生在“创建MC的外表项目,绑定一个DLF Catalog”过程中。

    这部分权限由RAM访问控制管理,需要由主账号登录RAM访问控制台配置相关操作,RAM用户授权

  • 数据面权限:即登录创建好的外部项目后,读写Paimon表时需要校验的权限,主要发生在“创建/维护/使用被绑定的DLF Catalog中的Schema/Table以及其他资源的过程,一般在MCSQL中执行”。

    这部分权限由DLF控制台管理,需要由主账号登录DLF控制台配置相关操作,RAM用户授权

步骤二:创建Paimon_DLF外部数据源

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择管理配置 > 外部数据源 。

  3. 外部数据源页面,单击创建外部数据源

  4. 在弹出的新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:

    参数

    是否必填

    说明

    外部数据源类型

    必填

    选择Paimon_DLF

    外部数据源名称

    必填

    可自定义命名。命名规则如下:

    • 以字母开头,且只能包含小写字母、下划线和数字。

    • 不能超过128个字符。

    例如paimon_dlf

    外部数据源描述

    选填

    根据需要填写。

    地域

    必填

    默认为当前地域。

    认证和鉴权

    必填

    默认为阿里云RAM角色。

    关联服务角色

    必填

    默认生成。

    Endpoint

    必填

    自动生成,杭州地域为:cn-hangzhou-intranet.dlf.aliyuncs.com

    外部数据源补充属性

    选填

    特殊声明的外部数据源补充属性。指定后,使用此外部数据源的任务可以按照参数定义的行为访问源系统。

    说明

    支持的具体参数请关注后续官网文档更新说明,具体参数将随产品能力演进逐步放开。

  5. 单击确认,完成外部数据源的创建。

  6. 外部数据源页面,单击目标数据源对应的操作详情,可查看数据源详细信息。

步骤三:创建外部项目

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择管理配置 > 项目管理

  3. 外部项目页签,单击新建项目

  4. 在弹出的新增项目对话框,根据界面提示文案配置项目信息,单击确认完成项目创建。

    参数

    是否必填

    说明

    项目类型

    必填

    默认为外部项目。

    地域

    必填

    默认为当前地域,此处无法修改。

    项目名称(全网唯一)

    必填

    字母开头,包含字母、数字及下划线(_),长度在3-28个字符。

    MaxCompute外部数据源类型

    选填

    默认为Paimon_DLF。

    MaxCompute外部数据源

    选填

    • 选择已有:会出现已经创建过的外部数据源。

    • 新建外部数据源:即可新建并使用新的外部数据源。

    MaxCompute外部数据源名称

    必填

    • 选择已有:在下拉列表中选择已经创建好的外部数据源名称。

    • 新建外部数据源:则会使用新建的外部数据源名称。

    数据目录

    必填

    DLF数据目录。

    计算资源付费类型

    必填

    包年包月按量付费

    默认Quota

    必填

    选择已有Quota.

    描述

    选填

    自定义项目描述。

步骤四:使用SQL访问数据源系统

  1. 选择连接工具登录外部项目。

    如下为DataWorks新版工作空间数据开发SQL节点操作示例。

    1. 登录DataWorks控制台,在左上角选择地域。

    2. 在左侧导航栏选择工作空间

    3. 工作空间列表页面,单击创建工作空间或单击已有目标工作空间名称。

    4. 空间详情页面,单击左侧导航栏计算资源

    5. 计算资源页面,单击绑定计算资源,选择MaxCompute

    6. 填写绑定MaxCompute计算资源基本信息

      其中MaxCompute项目选择外部项目。

  2. 列出外部项目中的schema。

    -- 打开session级别支持schema语法开关。
    SET odps.namespace.schema=true;
    SHOW schemas;
    
    -- 示例返回结果。 
    ID = 20250919****am4qb
    default
    system
    
    
    OK
  3. 在外部项目中列出schema下的表。

    如果需要在当前环境访问生产外部项目的表,需要在所有SQL前加上use externao_project_pro;

    -- schema_name为外部项目中show出来的Schema名称。
    SET odps.namespace.schema=true;
    USE schema <schema_name>;
    SHOW tables;
    
    -- 返回结果。
    ID = 20250919****am4qb
    acs:ram::<uid>:root  emp
    
    
    OK
  4. 在外部项目中新建schema。

    -- 本示例中schema_nameschema_demo_test。
    CREATE schema <schema_name>;
  5. 使用新建的schema。

    USE schema <schema_name>;
  6. 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        | 李四        | 
      +------------+------------+
  7. 切换为已有的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.”

image

解决方案

  1. 如果是RAM用户,首先确认已经赋予RAM用户AliyunMaxComputeFullAccess权限,详情见操作步骤一。

  2. 由于该入口会选择到DLFcatalog,确认已经授予DLF相关操作权限,详情见操作步骤一。

问题二:在外部项目的default schema下执行show tables报错

问题描述:外部项目的default schema下执行show tables,提示错误:“Forbidden:User acs: ram: :<uid>:user/** doesn't have privilege LIST on DATABASE default”。

解决方案

  1. 登录数据湖构建(DLF)控制台,在左上角选择地域。

  2. 在左侧导航栏选择系统和安全

  3. 访问控制 > 用户页签,刷新查看当前RAM是否存在。

  4. 若存在,则在访问控制 > 角色RAM用户授权。

问题三:报错ivalid database operations on two-tier

问题描述:外部项目内执行show schemas报错invalid database operations on two-tier。

解决方案

  1. 首先确认当前使用的项目为外部项目。

    1. 若用DataWorksSQL节点,点击右侧调试配置/调试配置,查看绑定的计算资源是否为外部项目。

    2. 若用DataWorksSQL分析,点击右上角数据源,查看绑定的数据源是否为外部项目。

    3. 若用MaxComputeSQL分析,点击右侧运行配置,查看计算资源处选择的项目是否为外部项目。

    4. 若用odpscmd,查看odps_config.ini文件中的project_name参数值是否为外部项目。

  2. 确认使用的是外部项目后,执行如下SQL,需选中一起执行。

    -- 打开session级别支持schema语法开关。
    SET odps.namespace.schema=true;
    SHOW schemas;

问题四:执行show schemas只有default schema

问题描述:在外部项目内执行show schemas,返回结果只有default。

解决方案

  1. 首先确认当前使用的项目是外部项目。

    1. 若用DataWorksSQL节点,点击右侧调试配置/调试配置,查看绑定的计算资源是否为外部项目。

    2. 若用DataWorksSQL分析,点击右上角数据源,查看绑定的数据源是否为外部项目。

    3. 若用MaxComputeSQL分析,点击右侧运行配置,查看计算资源处选择的项目是否为外部项目。

    4. 若用odpscmd,查看 odps_config.ini 文件中的project_name参数值是否为外部项目。

  2. 确认是外部项目后,登录数据湖构建(DLF)控制台确认当前外部项目绑定的catalog下是否有其他数据库。

  3. 如以上12确认完成,show schemas结果仍没有预期的数据库,可以提交工单反馈问题。

问题五:报错You should use dynamic bucket (bucket = -1) mode in cross partition update

问题描述:外部项目内执行show tables报错ODPS-0110005: com.aliyun.odps.meta.exception.MetaException: com.aliyun.odps.common.table.na.NativeException: common/table/jni/utils/jni_helper.cpp(79): UnretryableException: Common table connector exception - ExceptionType: java.lang.IllegalArgumentException - Message: You should use dynamic bucket (bucket = -1) mode in cross partition update case (Primary key constraint [sending_time, symbol, sequence_number] not include all partition fields [pt]).[pt])

解决方案

MaxCompute目前不支持“固定bucketcross partition pk表”,所以在show tables的时候会报错。

临时绕过方案:通过数据湖构建(DLF)控制台删除不支持的cross partition pk表。

问题六:报错Can't set default schema if odps.namespace.schema is false

问题描述:执行show tables/show schemas报错 FAILED: Can't set default schema if odps.namespace.schema is false.

解决方案

  1. 优先查看SQL前是否加了session级别支持schema语法开关 SET odps.namespace.schema=true;

  2. 如果打开开关后还是报错,需要确认指令顺序,若要读其他外部项目的表,参数正确顺序如下:

    USE external_project;
    SET odps.namespace.schema=true;
    USE schema schema_name;
    SHOW tables;