MaxCompute支持通过创建Paimon外部表与存储于OSS上的Paimon表目录建立映射关系,并访问其中的数据。本文为您介绍如何创建Paimon外部表,并通过MaxCompute访问Paimon外部表。
背景信息
Apache Paimon是一种流批一体的湖存储格式,具备高吞吐的写入和低延迟的查询能力。实时计算Flink版、E-MapReduce的常见计算引擎(如Spark、Hive或Trino)都与Paimon有完善的集成。借助Apache Paimon,您可快速构建自己的数据湖存储服务在存储服务OSS上,并接入MaxCompute实现数据湖的分析。您可以通过元数据过滤来减少处理任务中对不需要的OSS目录中文件的读取。
前提条件
已具备访问OSS的权限。阿里云账号(主账号)、RAM用户或RAMRole身份可以访问OSS外部表,授权信息请参见OSS的STS模式授权。
(可选)已准备好OSS存储空间(Bucket)、OSS目录及OSS数据文件。具体操作请参见创建存储空间、管理目录和简单上传。
MaxCompute已支持在OSS侧自动创建目录,对于携带外部表及UDF的SQL语句,您可以通过一条SQL语句执行读写外部表及UDF的操作。原手动创建目录方式仍然支持。
已创建MaxCompute项目。具体操作请参见创建MaxCompute项目。
由于MaxCompute只在部分地域部署,跨地域的数据连通性可能存在问题,因此建议Bucket与MaxCompute项目所在地域保持一致。
已具备在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 Catalog和Paimon表,并在表中插入数据,示例如下。
如果您在OSS中已有Paimon表数据,可忽略此步骤。
登录实时计算控制台,创建Paimon Filesystem Catalog。假设创建的Catalog名称为
paimoncatalog
,具体操作请参见创建Paimon Filesystem Catalog。创建Paimon表,具体操作请参见管理Paimon表。
在数据查询文本编辑区域输入如下命令后,选中代码后单击运行。
CREATE TABLE `paimoncatalog`.`default`.test_tbl ( id BIGINT, data STRING, dt STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt);
在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 ...
语句),需要执行以下操作:在作业运维页面单击目标作业,进入部署详情页签。
编辑运行参数配置,在其他配置中设置
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_path
为Flink中创建的Paimon表路径,例如oss-mc-test/paimon/default.db/test_tbl
。获取方法如下:
登录实时计算控制台,单击工作空间名称进入目标工作空间。
在左侧导航栏,单击数据管理。
在元数据页面单击目标Catalog下的default,并在default页面中单击目标表操作列的查看。
在表结构详情页签的表属性区域获取path参数值,table_path中仅填写
oss://
之后的路径。
步骤三:通过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外部表。