(邀测)外部项目基于FileSystem Catalog读写湖上Paimon数据

本文介绍基于Flink创建Paimon Catalog并生成数据,MaxCompute根据Filesystem Catalog创建外部项目,从而直接读取Paimon表数据。

适用范围

  • 只支持Paimon格式表。

  • 不支持写入Dynamic Bucket表。

  • 不支持写入Cross Partition表。

操作步骤

步骤一:源数据准备

如在OSS中已有Paimon表数据,可跳过此步骤。

  1. 登录Flink控制台,单击目标工作空间名称。

  2. 在左侧菜单栏,选择数据管理

  3. 在右侧Catalog列表界面,单击创建Catalog,在弹出的创建 Catalog对话框里,选择Apache Paimon,单击下一步并配置如下参数:

    参数

    是否必填

    说明

    metastore

    必填

    元数据存储类型。本示例中选择filesystem

    catalog name

    必填

    自定义catalog名称,例如paimon-test

    warehouse

    必填

    OSS服务中所指定的数仓目录,例如oss://paimon-fs/paimon-test/。登录OSS控制台,开通服务并创建Bucket,详情请参见OSS控制台快速入门

    fs.oss.endpoint

    必填

    OSS服务的endpoint,例如oss-cn-hangzhou-internal.aliyuncs.com

    fs.oss.accessKeyId

    必填

    访问OSS服务所需的Access Key ID。

    fs.oss.accessKeySecret

    必填

    访问OSS服务所需的Access Key Secret。

  4. 基于Paimon Catalog创建Paimon表并写入数据。在左侧导航栏,选择数据开发 > 数据查询页面的查询脚本页签,单击image,新建查询脚本。运行如下代码:

    说明

    由于Flink使用Paimon Catalog,所以会默认遵守Paimon Catalog在文件系统上的组织形式,即paimon_catalog_name/database_name.db/xxxx。若使用其他引擎读写oss此目录的Paimon数据,也需要遵守Paimon Catalog在文件系统上的组织形式,并且只存放Paimon格式数据,否则会被识别为异常数据报错。

    CREATE TABLE `filesystem-catalog-paimon`.`default`.test_tbl (
        id BIGINT,
        data STRING,
        dt STRING,
        PRIMARY KEY (dt, id) NOT ENFORCED
    ) PARTITIONED BY (dt)
    WITH (
        'bucket' = '3'
    );
    
    INSERT INTO `filesystem-catalog-paimon`.`default`.test_tbl 
      VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18'),(3,'EEE','2025-06-18');
  5. 查看生成的文件。登录OSS控制台,查看Paimon Catalog绑定的OSS目录下生成的Paimon表。

    image

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

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

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

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

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

    参数

    是否必填

    说明

    外部数据源类型

    必填

    选择Filesystem Catalog

    外部数据源名称

    必填

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

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

    • 不能超过128个字符。

    外部数据源描述

    选填

    根据需要填写。

    地域

    必填

    默认为当前地域。

    认证和鉴权

    必填

    默认为阿里云RAM角色

    RoleARN

    必填

    acs:ram::<uid>:role/aliyunodpsdefaultrole

    存储类型

    必填

    OSSOSS-HDFS

    Endpoint

    必填

    系统默认生成。

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

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

步骤三:MaxCompute创建外部项目

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

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

  3. 项目管理页面,单击外部项目页签,然后单击新建项目

  4. 新增项目对话框,根据界面提示配置参数。参数说明如下:

    参数

    是否必填

    说明

    项目类型

    必填

    默认为外部项目。

    地域

    必填

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

    项目名称(全网唯一)

    必填

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

    MaxCompute外部数据源类型

    选填

    选择Filesystem Catalog。

    MaxCompute外部数据源

    选填

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

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

    MaxCompute外部数据源名称

    必填

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

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

    认证和鉴权

    必填

    任务执行者身份,如未创建服务关联角色,需要先创建才可以使用此模式。

    RoleARN

    必填

    acs:ram::<uid>:role/aliyunodpsdefaultrole

    存储类型

    必填

    OSSOSS-HDFS。

    Endpoint

    必填

    默认生成。

    Bucket数据目录

    必填

    填写在OSS中创建的Bucket目录。

    表格式

    必填

    默认为Paimon。

    计算资源付费类型

    必填

    包年包月按量付费

    默认Quota

    必填

    选择已有Quota.

    描述

    选填

    自定义项目描述。

  5. 单击确认,完成项目创建。

步骤四:读写Paimon

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

  2. 进入新创建的外部项目,查看已有的Paimon schemas。

    -- 打开session级别支持schema语法开关。
    SET odps.namespace.schema=true;
    SHOW schemas;
    
    -- 返回结果如下。
    ID = 20250922********wbh2u7
    default
    
    
    OK
  3. 读取default schema下的表。

    SET odps.sql.allow.fullscan=true; 
    SELECT * FROM <external_project_name>.default.test_tbl;
    
    -- 返回结果如下。
    +------------+------------+------------+
    | id         | data       | dt         | 
    +------------+------------+------------+
    | 1          | CCC        | 2024-07-18 | 
    | 2          | DDD        | 2024-07-18 | 
    | 3          | EEE        | 2025-06-18 | 
    +------------+------------+------------+
  4. 向已存在的Paimon表中写入数据。

    INSERT INTO test_tbl PARTITION(dt='2025-08-26') VALUES(4,'FFF');
    SELECT * FROM test_tbl;
    
    -- 返回结果如下。
    +------------+------------+------------+
    | id         | data       | dt         | 
    +------------+------------+------------+
    | 1          | CCC        | 2024-07-18 | 
    | 2          | DDD        | 2024-07-18 | 
    | 3          | EEE        | 2025-06-18 | 
    | 4          | FFF        | 2025-08-26 | 
    +------------+------------+------------+
  5. 在新建的schema中创建表,并写入数据。

    新建一张表写入数据,MaxCompute也会按照Paimon Catalog在文件系统上的组织形式写入新数据。

    -- 创建schema。
    CREATE schema testschema;
    
    -- 在新建的schema中建表。
    use schema testschema;
    CREATE TABLE table_test(id int,name string);
    
    -- 在新建的表中插入数据,并读取。
    INSERT INTO table_test VALUES (101,'张三'),(102,'李四');
    SELECT * FROM table_test;
    
    -- 返回结果如下。
    +------------+------------+
    | id         | name       | 
    +------------+------------+
    | 101        | 张三        | 
    | 102        | 李四        | 
    +------------+------------+
  6. 登录OSS控制台,在OSS中找到外部项目的Bucket目录,可以看到新建的schema和表。