Paimon外部表

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

背景信息

Apache Paimon是一种流批一体的湖存储格式,具备高吞吐的写入和低延迟的查询能力。实时计算FlinkE-MapReduce的常见计算引擎(如Spark、HiveTrino)都与Paimon有完善的集成。借助Apache Paimon,您可快速构建自己的数据湖存储服务在存储服务OSS上,并接入MaxCompute实现数据湖的分析。您可以通过元数据过滤来减少处理任务中对不需要的OSS目录中文件的读取。

前提条件

  • 已具备访问OSS的权限。阿里云账号(主账号)、RAM用户或RAMRole身份可以访问OSS外部表,授权信息请参见OSSSTS模式授权

  • (可选)已准备好OSS存储空间(Bucket)、OSS目录及OSS数据文件。具体操作请参见创建存储空间管理目录简单上传

    MaxCompute已支持在OSS侧自动创建目录,对于携带外部表及UDFSQL语句,您可以通过一条SQL语句执行读写外部表及UDF的操作。原手动创建目录方式仍然支持。
  • 已创建MaxCompute项目。具体操作请参见创建MaxCompute项目

    由于MaxCompute只在部分地域部署,跨地域的数据连通性可能存在问题,因此建议BucketMaxCompute项目所在地域保持一致。
  • 已具备在MaxCompute项目中创建表(CreateTable)的权限。表操作的权限信息请参见MaxCompute权限

使用限制

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

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

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

数据类型支持

说明

下表中已开通表示支持,未开通表示不支持。

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

数据类型

是否支持

TINYINT

已开通

SMALLINT

已开通

INT

已开通

BIGINT

已开通

BINARY

已开通

FLOAT

已开通

DOUBLE

已开通

DECIMAL(precision,scale)

已开通

VARCHAR(n)

已开通

CHAR(n)

已开通

STRING

已开通

DATE

已开通

DATETIME

未开通

TIMESTAMP

已开通

TIMESTAMP_NTZ

未开通

BOOLEAN

已开通

ARRAY

已开通

MAP

已开通

STRUCT

已开通

JSON

未开通

创建外部表

语法结构

各格式的外部表语法结构详情,请参见OSS外部表

CREATE EXTERNAL TABLE  [if NOT EXISTS] <mc_oss_extable_name>
(
  <col_name> <data_type>,
  ...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
  'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION '<oss_location>';

公共参数

公共参数说明请参见基础语法参数说明

写入数据

MaxCompute写入语法详情,请参见写入语法说明

查询分析

使用示例

步骤一:在Flink中准备数据

创建Paimon CatalogPaimon表,并在表中插入数据,示例如下。

说明

如果您在OSS中已有Paimon表数据,可忽略此步骤。

  1. 登录实时计算控制台,创建Paimon Filesystem Catalog。假设创建的Catalog名称为paimoncatalog,具体操作请参见创建Paimon Filesystem Catalog

  2. 创建Paimon表,具体操作请参见管理Paimon

    1. 数据查询文本编辑区域输入如下命令后,选中代码后单击运行

      CREATE TABLE `paimoncatalog`.`default`.test_tbl (
          id BIGINT,
          data STRING,
          dt STRING,
          PRIMARY KEY (dt, id) NOT ENFORCED
      ) PARTITIONED BY (dt);
    2. 数据开发 > ETL页面,创建包含如下语句的SQL作业,部署并运行作业。具体操作请参见SQL作业开发

      INSERT INTO `paimoncatalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
      重要
      • 请确认SQL作业的引擎版本为vvr-8.0.1-flink-1.17及以上版本。

      • SQL作业有限流作业(例如执行INSERT INTO ... VALUES ...语句),需要执行以下操作:

        1. 作业运维页面单击目标作业,进入部署详情页签。

        2. 编辑运行参数配置,在其他配置中设置execution.checkpointing.checkpoints-after-tasks-finish.enabled: true代码,并保存。关于如何配置作业的运行参数详情,请参见配置作业部署信息

步骤二:通过MaxCompute创建Paimon外表

MaxCompute中执行以下SQL代码,创建MaxCompute Paimon外部表。

CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
    id BIGINT,
    data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
    'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/<table_path>'
;

MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;

上述代码中table_pathFlink中创建的Paimon表路径,例如oss-mc-test/paimon/default.db/test_tbl。获取方法如下:

  1. 登录实时计算控制台,单击工作空间名称进入目标工作空间。

  2. 在左侧导航栏,单击数据管理

  3. 元数据页面单击目标Catalog下的default,并在default页面中单击目标表操作列的查看

  4. 表结构详情页签的表属性区域获取path参数值,table_path中仅填写oss://之后的路径。image

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

MaxCompute中执行以下命令,查询MaxCompute Paimon外部表oss_extable_paimon_pt。

SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';

返回结果如下:

+------------+------------+------------+
| id         | data       | dt         |
+------------+------------+------------+
| 1          | CCC        | 2024-07-18 |
| 2          | DDD        | 2024-07-18 |
+------------+------------+------------+

相关文档

您还可以在Flink中以自定义Catalog的方式创建MaxCompute Paimon外部表,并在写入数据后,通过MaxCompute查询并消费Paimon数据,详情请参见基于Flink创建MaxCompute Paimon外部表