基于Flink创建MaxCompute Paimon外部表

MaxCompute支持通过创建Paimon外部表来与存储在OSS上的Paimon表目录建立映射关系,并访问其中的数据。本文将介绍如何基于Flink创建Paimon外部表并通过MaxCompute访问Paimon外部表。

背景信息

Apache Paimon是一种流批一体的湖存储格式,具备高吞吐的写入和低延迟的查询能力。阿里云实时计算Flink版开源大数据平台E-MapReduce的常见计算引擎(如Spark、Hive或Trino)都与Paimon有完善的集成。借助Apache Paimon,您可以快速构建自己的数据湖存储服务在存储服务OSS上,并接入MaxCompute实现数据湖的分析。关于Apache Paimon的详细信息,请参见Apache Paimon

前提条件

  • 当前执行操作的账号已具备创建MaxCompute表(CreateTable)的权限。更多表权限信息,请参见MaxCompute权限

  • 已创建MaxCompute项目。具体操作,请参见创建MaxCompute项目

  • 已创建存储空间(Bucket)以及对应的文件目录。具体操作,请参见创建存储空间

    说明

    由于MaxCompute只在部分地域部署,跨地域的数据连通性可能存在问题,因此建议Bucket与MaxCompute项目所在地域保持一致。

  • 已购买Flink全托管,具体操作请参见开通实时计算Flink版

注意事项

  • 当前MaxCompute仅支持对Paimon外部表的读取操作,暂时不支持写入和自动跟随Paimon表结构变更等操作。

  • Paimon当前暂时不支持开启了Schema操作的MaxCompute项目。

  • Paimon外部表不支持cluster属性。

  • Paimon外部表暂不支持查询回溯历史版本的数据等特性。

步骤一:在MaxCompute项目中上传Paimon插件

您可以选择以下其中一种方式,在已创建的MaxCompute项目中上传Paimon插件

使用MaxCompute客户端

使用DataWorks

通过客户端(odpscmd)访问已创建的MaxCompute项目,并执行以下代码,将paimon_maxcompute_connector.jar上传至MaxCompute项目中。

ADD JAR <path_to_paimon_maxcompute_connector.jar>;

步骤二:基于Flink创建MaxCompute Paimon外部表

本文的最佳实践场景是以Flink为主要的操作场景,从Flink向OSS写入Paimon文件,自定义Flink Catalog,同时向MaxCompute创建基于OSS的支持Paimon文件读取能力的外表。最后从MaxCompute读取OSS上Flink写入的Paimon数据。

  1. 登录实时计算控制台,新建查询脚本。新建查询脚本详情,请参见查询脚本

  2. 在脚本编辑区域,填写Catalog代码信息及参数值后,选中代码,单击运行

    CREATE CATALOG `<catalog name>` WITH (
     'type' = 'paimon',
      'metastore' = 'maxcompute',
      'warehouse' = '<warehouse>',
      'maxcompute.endpoint' = '<maxcompute.endpoint>',
      'maxcompute.project' = '<maxcompute.project>',
      'maxcompute.accessid' = '<maxcompute.accessid>',
      'maxcompute.accesskey' = '<maxcompute.accesskey>',
      'maxcompute.oss.endpoint' = '<maxcompute.oss.endpoint>',
      'fs.oss.endpoint' = '<fs.oss.endpoint>',
      'fs.oss.accessKeyId' = '<fs.oss.accessKeyId>',
      'fs.oss.accessKeySecret' = '<fs.oss.accessKeySecret>'
    );

    参数说明

    参数

    是否必填

    说明

    catalog name

    Paimon Catalog名称,自定义配置时,要求为英文字母。本文以catalogname为例。

    type

    Catalog类型,固定值为paimon。

    metastore

    元数据存储类型,取值为maxcompute。

    warehouse

    OSS服务中所指定的数仓目录,格式为oss://<bucket>/<object>,其中:

    • bucket:表示您创建的OSS Bucket名称。

    • object:表示您存放数据的路径。

    您可以在OSS管理控制台上查看您的bucket和object名称。

    maxcompute.endpoint

    MaxCompute服务的访问域名。

    您需要根据创建MaxCompute项目时选择的地域以及网络连接方式配置Endpoint。各地域及网络对应的Endpoint信息,请参见Endpoint

    maxcompute.project

    目标MaxCompute项目名称。

    暂不支持开启了Schema的MaxCompute项目。

    maxcompute.accessid

    拥有MaxCompute权限的阿里云账号或RAM账号的AccessKey ID。

    您可以进入AccessKey管理页面获取AccessKey ID。

    maxcompute.accesskey

    AccessKey ID对应的AccessKey Secret。

    maxcompute.oss.endpoint

    MaxCompute访问OSS服务的访问域名,如果未填写,将默认使用fs.oss.endpoint参数的值。

    重要

    由于OSS Bucket与MaxCompute项目处于同一地域,此处需填写内网Endpoint。关于OSS各地域及网络对应的Endpoint值,请参见访问域名和数据中心

    fs.oss.endpoint

    OSS服务的连接地址。

    当warehouse指定的OSS Bucket与Flink工作空间不在同一地域,或使用其他账号下的OSS Bucket时需要填写。

    说明

    您需要根据创建OSS Bucket时选择的地域以及网络连接方式配置Endpoint。各地域及网络对应的Endpoint信息,请参见访问域名和数据中心

    fs.oss.accessKeyId

    拥有读写OSS权限的阿里云账号或RAM账号的AccessKey ID。

    当warehouse指定的OSS Bucket与Flink工作空间不在同一地域,或使用其他账号下的OSS Bucket时需要填写。

    您可以进入AccessKey管理页面获取AccessKey ID。

    fs.oss.accessKeySecret

    AccessKey ID对应的AccessKey Secret。

    当warehouse指定的OSS Bucket与Flink工作空间不在同一地域,或使用其他账号下的OSS Bucket时需要填写。

  3. 创建Paimon外部表。

    1. 创建示例表test_tbl。

      查询脚本页签的脚本编辑区域,执行以下语句,等待结果页签中提示已完成。本文以创建表test_tbl为例。

      CREATE TABLE `catalogname`.`default`.test_tbl (
       dt STRING,
       id BIGINT,
       data STRING,
       PRIMARY KEY (dt, id) NOT ENFORCED
      ) PARTITIONED BY (dt);
    2. 向示例表test_tbl中写入数据。

      作业草稿页面,创建包含如下语句的SQL作业,部署并运行作业。关于如何创建并运行SQL作业详情,请参见SQL作业开发

      --此处将检查点间隔缩短为 10s,是为了更快地提交数据。
      SET 'execution.checkpointing.interval' = '10s';
      
      INSERT INTO `catalogname`.`default`.test_tbl VALUES ('2023-04-21', 1, 'AAA'), ('2023-04-21', 2, 'BBB'), ('2023-04-22', 1, 'CCC'), ('2023-04-22', 2, 'DDD');

      说明

      • Paimon结果表在每次检查点完成之后才会正式提交数据。

      • 在生产环境下,系统检查点的间隔与两次系统检查点之间的最短时间间隔根据业务对延时要求的不同,一般设置为 1 分钟到 10 分钟。

      • 请确认SQL作业的引擎版本为vvr-8.0.5-flink-1.17及以上版本。

步骤三:通过MaxCompute读取Paimon外部表

  1. 使用本地客户端(odpscmd)连接或其他可以运行MaxCompute SQL的工具,执行以下命令。

    SET odps.sql.common.table.planner.ext.hive.bridge = true;
    SET odps.sql.hive.compatible = true;
  2. 执行以下命令,查询MaxCompute Paimon外部表test_tbl。

    SELECT * FROM test_tbl WHERE dt = '2023-04-21';

    返回结果如下。

    +------------+------------+------------+
    | id | data | dt |
    +------------+------------+------------+
    | 1 | AAA | 2023-04-21 |
    | 2 | BBB | 2023-04-21 |
    +------------+------------+------------+
### 配置和运行 Paimon 环境中的 Flink SQL 在 Paimon 环境中使用 Flink SQL 的过程中,可以利用其对主键表的支持以及 Append-Only 表的功能来实现高效的查询操作[^1]。为了创建临时视图以便于后续的查询操作,可以通过 `CREATE TEMPORARY VIEW` 语句完成这一目标[^2]。 以下是具体的操作方法: #### 创建环境并加载依赖项 首先,在启动 Flink 环境之前,需确保已正确配置 Paimon 连接器的相关依赖项。如果需要指定特定的表前缀,则可以在命令行参数中通过 `[--table_prefix <paimon-table-prefix>]` 来设置相应的前缀[^4]。 #### 使用示例代码 下面是一个完整的示例,展示如何在 Paimon 中执行基本的 Flink SQL 查询: ```sql -- 设置表环境 SET 'execution.runtime-mode' = 'batch'; -- 创建一个临时视图用于访问 Paimon 数据 CREATE TEMPORARY TABLE my_paimon_table ( id BIGINT, name STRING, PRIMARY KEY(id) NOT ENFORCED -- 定义主键以优化连接性能 ) WITH ( 'connector' = 'paimon', 'path' = '/my/paimon/table/path' ); -- 执行简单的 SELECT 查询获取最新数据快照 SELECT * FROM my_paimon_table; ``` 上述脚本展示了如何定义带有主键约束的表结构,并将其映射到实际存储路径下的 Paimon 表上。当处于批处理模式时,该表的行为类似于 Hive 表,允许用户对其执行各种复杂的 Batch SQL 操作[^3]。 #### 注意事项 需要注意的是,只有在支持主键或者仅追加(Append-Only)的数据场景下才能充分发挥 Paimon 提供的优势。因此设计数据模型时应充分考虑这一点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值