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外部表,您可以使用阿里云实时计算Flink版或开源大数据平台E-MapReduce。
Paimon当前暂时不支持开启了Schema操作的MaxCompute项目。
Paimon外部表不支持cluster属性。
步骤一:在MaxCompute项目中上传Paimon插件
您可以选择以下其中一种方式,在已创建的MaxCompute项目中上传Paimon插件。
使用MaxCompute客户端
通过客户端(odpscmd)访问已创建的MaxCompute项目,并执行以下代码,将paimon_maxcompute_connector.jar
上传至MaxCompute项目中。
ADD JAR <path_to_paimon_maxcompute_connector.jar>;
使用DataWorks
登录DataWorks控制台,在左侧导航栏选择工作空间列表,单击目标工作空间操作列中的快速进入 > 数据开发。
在数据开发页面,单击新建按钮,选择新建资源 > JAR。
在新建资源对话框,配置新建资源参数,上传
paimon_maxcompute_connector.jar
,单击新建。新建资源操作详情,请参见步骤一:创建或上传资源。资源创建完成后,您需在资源编辑页面,单击工具栏中的图标,提交资源至调度开发服务器端。
步骤二:基于Flink创建MaxCompute Paimon外部表
本文的最佳实践场景是以Flink为主要的操作场景,从Flink向OSS写入Paimon文件,自定义Flink Catalog,同时向MaxCompute创建基于OSS的支持Paimon文件读取能力的外表。最后从MaxCompute读取OSS上Flink写入的Paimon数据。
登录实时计算控制台,创建自定义Catalog类型。创建自定义Catalog类型操作详情,请参见创建自定义Catalog类型。
说明
创建自定义Catalog类型,需要上传Paimon自定义catalog插件。Paimon自定义catalog插件的下载链接,请参见下载链接。
在创建完自定义Catalog类型后,在自定义Catalog页签,单击刚创建好的自定义Catalog类型paimon-06-1,然后单击下一步。
填写Catalog代码信息及参数值,并单击确定。
CREATE CATALOG `<catalog name>` WITH ( 'type' = 'paimon-06-1', 'metastore' = 'maxcompute', 'warehouse' = '<warehouse>', 'fs.oss.endpoint' = '<oss endpoint>', 'fs.oss.accessKeyId' = '<oss access key id>', 'fs.oss.accessKeySecret' = '<oss access key secret>', 'maxcompute.endpoint' = '<maxcompute endpoint>', 'maxcompute.accessid' = '<maxcompute access id>', 'maxcompute.accesskey' = '<maxcompute access key>', 'maxcompute.project' = '<maxcompute project>', 'maxcompute.oss.endpoint' = '<maxcompute oss endpoint>' );
参数
是否必填
说明
catalog name
是
Paimon Catalog名称,自定义配置时,要求为英文字母。本文以catalogname为例。
type
是
Catalog类型,固定值为paimon-06-1。
metastore
是
元数据存储类型,取值为maxcompute。
warehouse
是
OSS服务中所指定的数仓目录,格式为
oss://<bucket>/<object>
,其中:bucket:表示您创建的OSS Bucket名称。
object:表示您存放数据的路径。
您可以在OSS管理控制台上查看您的bucket和object名称。
fs.oss.endpoint
是
OSS服务的连接地址。
您需要根据创建OSS Bucket时选择的地域以及网络连接方式配置Endpoint。各地域及网络对应的Endpoint信息,请参见访问域名和数据中心。
fs.oss.accessKeyId
是
拥有读写OSS权限的阿里云账号或RAM账号的AccessKey ID。
您可以进入AccessKey管理页面获取AccessKey ID。
fs.oss.accessKeySecret
是
AccessKey ID对应的AccessKey Secret。
您可以进入AccessKey管理页面获取AccessKey Secret。
maxcompute.endpoint
是
MaxCompute服务的连接地址。
您需要根据创建MaxCompute项目时选择的地域以及网络连接方式配置Endpoint。各地域及网络对应的Endpoint信息,请参见Endpoint。
maxcompute.accessid
是
拥有MaxCompute权限的阿里云账号或RAM账号的AccessKey ID。
您可以进入AccessKey管理页面获取AccessKey ID。
maxcompute.accesskey
是
AccessKey ID对应的AccessKey Secret。
您可以进入AccessKey管理页面获取AccessKey Secret。
maxcompute.project
是
目标MaxCompute项目名称。
maxcompute.oss.endpoint
否
MaxCompute访问OSS服务的访问域名,如果未填写,将默认使用fs.oss.endpoint参数的值。
说明
由于OSS Bucket与MaxCompute项目处于同一地域,建议您将maxcompute.oss.endpoint配置为内网Endpoint,否则将产生OSS流量费用。关于OSS各地域及网络对应的Endpoint值,请参见访问域名和数据中心。
创建Paimon外部表。
在元数据管理页面,选择paimon-06-1 > default,然后单击创建表。
在添加表对话框,选择Apache Paimon连接器,然后单击下一步。
执行以下语句,单击确定。本文以创建test_tbl为例。
CREATE TABLE `catalogname`.`default`.test_tbl ( dt STRING, id BIGINT, data STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt);
在SQL 开发页面,创建包含如下语句的SQL作业,部署并运行作业。关于如何创建并运行SQL作业详情,请参见SQL作业开发。
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');
说明请确认SQL作业的引擎版本为vvr-8.0.1-flink-1.17及以上版本。
若SQL作业有限流作业(例如执行
INSERT INTO ... VALUES ...
语句),需要在作业运维页面,编辑运行参数配置,在其他配置设置execution.checkpointing.checkpoints-after-tasks-finish.enabled: true
代码。关于如何配置作业的运行参数详情,请参见配置作业部署信息。
步骤三:通过MaxCompute读取Paimon外部表
使用本地客户端(odpscmd)连接或其他可以运行MaxCompute SQL的工具,执行以下命令。
SET odps.sql.common.table.planner.ext.hive.bridge = true; SET odps.sql.hive.compatible = true;
执行以下命令,查询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 | +------------+------------+------------+
- 本页导读 (1)