【Apache Paimon】-- 2 -- 核心特性 (0.9.0)

目录

1、实时更新

1.1、实时大批量更新

1.2、支持定义合并引擎

1.3、支持定义更新日志生成器

2、海量数据追加处理

2.1、append table

2.2、快速查询

     3、数据湖功能(类比:hudi、iceberg、delta)

3.1、支持 ACID 事务

3.2、支持 Time travel(时间旅行)

3.3、支持 Schema Evolution(元数据变更)

3.4、可扩展元数据:存储 PB 级大规模数据集和存储大量分区

3.4.1、表级别的元数据管理

3.4.2、架构可扩展性

3.4.3、自定义扩展

3.4.4、版本管理和一致性

3.4.5、与其他系统的兼容性

3.5、分区过期设置

4、参考


1、实时更新

1.1、实时大批量更新

         通过 Flink streaming 可以实现 primary key 表的实时大批量更新。

1.2、支持定义合并引擎

        用户可以随心所欲地更新记录。复制以保留最后一行,或部分更新,或汇总记录,或第一行,提供了很灵活的处理方式,总之可以用户自己决定。

        主键表的数据更新提供了以下合并机制:

合并机制

详情

(1)去重(Deduplicate)

去重机制(deduplicate)是默认的数据合并机制。对于多条具有相同primary key的数据,Paimon结果表仅会保留最新一条数据,并丢弃其它具有primary key的数据。

说明

如果最新一条数据是一条delete消息,所有具有该primary key的数据都将被丢弃。

(2)部分更新(Partial Update)

通过指定部分更新机制(partial-update),您可以通过多条消息对数据进行逐步更新,并最终得到完整的数据。具体来说,具有相同primary key的新数据将会覆盖原来的数据,但值为null的列不会进行覆盖。

例如,假设Paimon结果表按顺序收到了以下三条数据:

  • <1, 23.0, 10, NULL>

  • <1, NULL, NULL, 'This is a book'>

  • <1, 25.2, NULL, NULL>

第一列是primary key,则最终结果为<1, 25.2, 10, 'This is a book'>。

说明

  • 如果需要流读partial-update的结果,必须将changelog-producer参数设置为lookup或full-compaction。

  • partial-update无法处理delete消息。您可以设置partial-update.ignore-delete参数以忽略delete消息。

(3)预聚合(Aggregation)

部分场景下,可能只关心聚合后的值。预聚合机制(aggregation)将具有相同primary key的数据根据您指定的聚合函数进行聚合。对于不属于primary key的每一列,都需要通过fields.<field-name>.aggregate-function指定一个聚合函数,否则该列将默认使用last_non_null_value聚合函数。例如,考虑以下Paimon表的定义。

CREATE TABLE MyTable (product_id BIGINT,price DOUBLE,sales BIGINT,PRIMARY KEY (product_id) NOT ENFORCED
) WITH ('merge-engine' = 'aggregation','fields.price.aggregate-function' = 'max','fields.sales.aggregate-function' = 'sum'
);

price列将会根据max函数进行聚合,而sales列将会根据sum函数进行聚合。给定两条输入数据 <1, 23.0, 15>和 <1, 30.2, 20>,最终结果为<1, 30.2, 35>。当前支持的聚合函数与对应的数据类型如下:

  • sum:支持DECIMAL、TINYINT、SMALLINT、INTEGER、BIGINT、FLOAT和DOUBLE。

  • min和max:支持DECIMAL、TINYINT、SMALLINT、INTEGER、BIGINT、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP和TIMESTAMP_LTZ。

  • last_value和last_non_null_value:支持所有数据类型。

  • listagg:支持STRING。

  • bool_and和bool_or:支持BOOLEAN。

说明

  • 只有sum函数支持回撤与删除数据,其它聚合函数不支持回撤与删除。如果您需要某些列忽略回撤与删除消息,可以设置'fields.${field_name}.ignore-retract'='true'

  • 如果需要流读aggregation的结果,必须将changelog-producer参数设置为lookup或full-compaction。

              参数设置如下:

参数

说明

类型

必填

默认值

备注

merge-engine

相同primary key数据的合并机制。

String

deduplicate

参数取值如下:

  • deduplicate:仅保留最新一条。

  • partial-update:用最新数据中非null的列更新相同primary key的现有数据,其它列保持不变。

  • aggregation:通过指定聚合函数进行预聚合。

关于数据合并机制的具体分析,详情请参见数据合并机制。

1.3、支持定义更新日志生成器

         用户可以在更新中为合并引擎生成正确、完整的更新日志,简化流式分析。

         Paimon 每个数据文件包含多行,每行都有一种行类型(用字母表示),该类型将行标记为插入 (+I)、更新 (+U) 或删除 (-D)。更新可以支持变更日志生成器的更新前 (-U) 和更新后 (+U)。

2、海量数据追加处理

2.1、append table

         追加表(非 primary key table )提供大规模批处理和流式处理能力,并实现小文件合并。

 Paimon 表目前支持的写入模式如下:

模式

详情

Change-log

change-log写入模式是Paimon表的默认写入模式。该写入模式支持根据primary key对数据进行插入、删除与更新,您也可以在该写入模式下使用上文提到的数据合并机制与增量数据产生机制。

Append-only

append-only写入模式仅支持数据的插入,且不支持primary key。该模式比change-log模式更加高效,可在对数据新鲜度要求一般的场景下(例如分钟级新鲜度)作为消息队列的替代品。

关于append-only写入模式的详细介绍,请参见Apache Paimon官方文档。在使用append-only写入模式时,需要注意以下两点:

  • 建议您根据实际需求设置bucket-key参数,否则Paimon表将根据所有列的值进行分桶,计算效率较低。

  • append-only 写入模式可在一定程度上保证数据的产出顺序,具体的产出顺序为:

    1. 如果两条数据来自不同的分区,若设置了scan.plan-sort-partition参数,则分区值较小的数据将首先产出。否则来自较早创建的分区的数据将首先产出。

    2. 如果两条数据来自同一分区的同一分桶,则较早写入的数据将首先产出。

    3. 如果两条数据来自同一分区的不同分桶,由于不同分桶由不同的并发进行处理,因此不保证两条数据的产出顺序。

2.2、快速查询

         支持数据压缩,使用 Z 排序优化文件布局,使用最小最大等索引提供基于数据跳转的快速查询。
          Z-order 基本介绍:Z-Order 是一种可以将多维数据压缩到一维的技术,在时空索引以及图像方面使用较广。Z曲线可以以一条无限长的一维曲线填充任意维度的空间,对于数据库的一条数据来说,我们可以将其多个要排序的字段看作是数据的多个维度,z曲线可以通过一定的规则将多维数据映射到一维数据上,构建 z-value 进而可以基于该一维数据进行排序。

     3、数据湖功能(类比:hudi、iceberg、delta)

3.1、支持 ACID 事务

            Paimon 通过提供 ACID(原子性、一致性、隔离性、持久性)事务,确保数据的一致性和可靠性,这对于在复杂数据处理流水线中维护数据完整性至关重要。

3.2、支持 Time travel(时间旅行)

           当用户在查询数据的时候, 若要从之前的某一个时间点开始查询数据, 即任务启动时想要查一些历史数据, 则需用时间旅行这个特性。用户可通过 scan.mode 参数设置Paimon源表的消费位点。scan.mode 参数的可选值以及行为如下:

参数值

批读行为

流读行为

default

默认值,根据其他参数确定实际的行为。

  • 如果设置了scan.timestamp-millis,则行为与from-timestamp参数值相同。

  • 如果设置了scan.snapshot-id,则行为与from-snapshot参数值相同;

如果以上两个参数都没有设置,则行为与latest-full参数值相同。

latest-full

读产出表的最新 snapshot。

作业启动时,读首先产出表的最新snapshot,之后持续产出增量数据。

compacted-full

只读取产出表最近一次 compact后的snapshot。

作业启动时,首先产出表最近一次compact后的snapshot,之后持续产出增量数据。

latest

与latest-full相同。

只读取最新的变更数据

from-timestamp

只读取指定时间戳(含该时间戳)的快照中的所有数据。

作业启动时不产出snapshot,之后持续产出从scan.timestamp-millis开始(含)的增量数据。

from-snapshot

产出表的snapshot,snapshot编号由scan.snapshot-id指定。即只读取指定 id 的快照中的所有数据。

作业启动时不产出snapshot,之后持续产出从scan.snapshot-id开始(含)的增量数据。即从指定 id 的快照开始读取变更数据(包含后续新增)

from-snapshot-full

与from-snapshot相同。

作业启动时产出表的snapshot,snapshot编号由scan.snapshot-id指定,之后持续产出从scan.snapshot-id开始(不含)的增量数据。

3.3、支持 Schema Evolution(元数据变更)

        即源端增加列、不用重启 Flink 作业、可以自动识别实时导入到 Paimon 表。目前,Paimon支持的 CDC 形式包括:Mysql、Postgres、Kafka、Mongo、Pulsar。

3.4、可扩展元数据:存储 PB 级大规模数据集和存储大量分区

       Apache Paimon 元数据可扩展主要指的是其在元数据管理上的扩展能力和灵活性。具体包括以下方面:

3.4.1、表级别的元数据管理

  • 多表支持:Paimon能够同时管理大量表的元数据,且性能随表的数量扩展良好。
  • 动态分区管理:支持大规模分区动态加载和裁剪,适合高并发场景和海量分区表。

3.4.2、架构可扩展性

  • 元数据分布式存储:Paimon的元数据可以存储在分布式存储(如 HDFS、S3)或集中式系统(如 Hive Metastore)中,能够支持大规模的元数据查询和更新。
  • 元数据分片和分区:通过分布式存储或缓存优化元数据访问,提升查询效率,减少热点问题。

3.4.3、自定义扩展

  • Schema 演进:支持字段的添加、修改、删除等操作,而无需重新生成全量数据表。
  • 自定义元数据:支持用户根据需求自定义元数据字段,如表注释、存储策略、访问权限等。

3.4.4、版本管理和一致性

  • 多版本管理:Paimon对表的元数据支持多版本管理,可以随时回滚或查询历史元数据。
  • 事务支持:确保元数据更新的一致性和隔离性(ACID),即便在高并发操作下也能保证正确性。

3.4.5、与其他系统的兼容性

  • 与 Hive Metastore 的集成:通过标准接口与现有大数据生态兼容(如 Hive、Spark、Flink 等)。
  • 统一视图:Paimon中的元数据能够被多个计算引擎同时使用,实现数据湖与数据仓的统一。

3.5、分区过期设置

Paimon表支持自动删除存活时长大于分区过期时长的分区的功能,以节省存储成本。详情如下:

  • 存活时长:当前系统时间减去分区值转化后的时间戳。分区值转化后的时间戳是按照以下顺序转化而得:

    1. 通过格式串partition.timestamp-pattern参数,将一个分区值转换为时间字符串。

      在该格式串中,分区列由美元符号($)加上列名表示。例如,假设分区列由year、month、day、hour四列组成,格式串$year-$month-$day $hour:00:00会将分区year=2023,month=04,day=21,hour=17转换为字符串2023-04-21 17:00:00

    2. 通过格式串partition.timestamp-formatter参数,将时间字符串转换为时间戳。

      如果该参数没有设置,将默认尝试yyyy-MM-dd HH:mm:ssyyyy-MM-dd两个格式串。任何Java的DateTimeFormatter兼容的格式串都可以使用。

  • 分区过期时间:您设置的partition.expiration-time参数值。

4、参考

Overview | Apache Paimon

Paimon连接器_实时计算 Flink版(Flink)-阿里云帮助中心

Understanding Apache Paimon's Consistency Model Part 1 — Jack Vanlightly

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/474501.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack配置

4-3vue-loader测试_哔哩哔哩_bilibili 一.新建文件夹vue_todo&#xff0c;vscode打开 二.ctrl打开终端&#xff0c;输入npm init -y&#xff0c;快速生成一个默认的package.json文件 之后左边出现项目初始化文件package.json 三.接下来需要webpack完成打包&#xff0c;所以安装…

5.STM32之通信接口《精讲》之USART通信---实验串口接收程序

根据上节&#xff0c;我们一已经完成了串口发送程序的代码&#xff0c;并且深入的解析探索了串口的原理&#xff0c;接下来&#xff0c;Whappy小编将带领大家进入串口接收程序的探索与实验&#xff0c;并将结合上一节串口发送一起来完成串口的发送和接收实验。 上来两张图 上图…

leetcode 扫描线专题 06-leetcode.836 rectangle-overlap 力扣.836 矩形重叠

题目 矩形以列表 [x1, y1, x2, y2] 的形式表示&#xff0c;其中 (x1, y1) 为左下角的坐标&#xff0c;(x2, y2) 是右上角的坐标。 矩形的上下边平行于 x 轴&#xff0c;左右边平行于 y 轴。 如果相交的面积为 正 &#xff0c;则称两矩形重叠。 需要明确的是&#xff0c;只在…

ASP.NET MVC宠物商城系统

该系统采用B/S架构&#xff0c;使用C#编程语言进行开发&#xff0c;以ASP.NET MVC框架为基础&#xff0c;以Visual Studio 2019为开发工具&#xff0c;数据库采用SQL Server进行保存数据。系统主要功能包括登录注册、宠物展示、个人中心、我的订单、购物车、用户管理、宠物类别…

最优化方法_罚函数法例题

1 外点罚函数 算法1 外点罚函数法 给定初点&#xff0c;初始罚因子,放大系数&#xff0c;允许误差&#xff0c;置k1。以为初始点&#xff0c;求解无约束问题得最优解。如果,则停止计算&#xff0c;为约束问题的近似最优解&#xff1b;否 则&#xff0c;增大罚因子&#xff0c;令…

python调用MySql保姆级教程(包会的)

目录 一、下载MySql 二、安装MySql 三、验证MySql是否OK 1、MySQL控制台验证 2、命令提示符cmd窗口验证 四、Python调用MySql 4.1 安装pysql 4.2 使用pysql 4.2.1、连接数据库服务器并且创建数据库和表 4.2.2 、将人脸识别考勤系统识别到的数据自动填入到数据库的表单中…

【鸿蒙生态崛起,开发者有哪些机遇与挑战?】HarmonyOS NEXT 引领数字化未来

文章目录 前言一、HarmonyOS NEXT 特点与升级二、全面突破操作系统核心技术三、鸿蒙生态全面守护用户隐私四、鸿蒙生态的崛起与开发者机遇五、全新鸿蒙生态引领数字化未来小结 前言 鸿蒙系统不断发展&#xff0c;有与安卓、iOS 形成三足鼎立之势&#xff0c;且其在智能手机、智…

ssh无法连接Ubuntu

试了多次ssh都无法连接&#xff0c;明明可以上网 网卡、防火墙、端口都没有问题&#xff0c;就是连接不上 结果是这个版本Ubuntu镜像默认没有安装ssh服务 安装SSH服务&#xff1a;apt-get install openssh-server 开启SSH服务&#xff1a;/etc/init.d/ssh start 就可以连接…

基于Java Springboot外卖平台系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数…

vue2动态导出多级表头表格

需求&#xff1a;导出多级表格&#xff0c;如下&#xff0c;每个人名对应的是不同的城市金钱和年龄&#xff0c;日期占俩行&#xff0c;需要根据数据进行动态展示 1.效果 2.关键代码讲解 2.1数据源 2.2所需插件 npm install xlsx 2.3关键代码 创建name组和date组&#xff0c…

散户持股增厚工具:智能T0算法交易

最近市场很多都说牛市&#xff0c;但是大多数朋友怎么来的又怎么吐出去了。这会儿我们用T0的智能算法交易又可以增厚我们的持仓收益。简单来说&#xff0c;就是基于用户原有的股票持仓&#xff0c;针对同一标的&#xff0c;配合智能T0算法&#xff0c;每天全自动操作&#xff0…

独立开发:一人公司模式下副业产品的全流程

在数字经济的浪潮下&#xff0c;越来越多的开发者选择成为自由职业者或创立一人公司&#xff0c;通过副业产品开发实现个人价值与经济收益的双重提升。本文将围绕一人公司模式下副业产品的设计、开发、运营及变现落地全流程&#xff0c;提供一套实战指南&#xff0c;帮助有志于…

SD模型微调之Textual Inversion和Embedding fine-tuning

​ &#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&a…

【Vue笔记】基于vue3 + element-plus + el-dialog封装一个自定义的dialog弹出窗口组件

这篇文章,介绍一下如何使用vue3+element-plus中的el-dialog组件,自己封装一个通用的弹出窗口组件。运行效果如下所示: 目录 1.1、父子组件通信 1.2、自定义VDialog组件(【v-model】模式) 1.2.1、编写VDialog组件代码 1.2.2、使用VDialog组件 1.2.3、运行效果 1.3、自…

Spring Cloud Alibaba [Gateway]网关。

1 简介 网关作为流量的入口&#xff0c;常用功能包括路由转发、权限校验、限流控制等。而springcloudgateway 作为SpringCloud 官方推出的第二代网关框架&#xff0c;取代了Zuul网关。 1.1 SpringCloudGateway特点: &#xff08;1&#xff09;基于Spring5&#xff0c;支持响应…

不完全微分PID控制算法

不完全微分PID控制算法是一种改进的PID控制方法&#xff0c;主要针对PID控制中的微分环节对高频噪声敏感的问题。通过对微分项进行优化和改造&#xff0c;减少其对噪声的放大作用&#xff0c;同时保留对系统动态变化的响应能力。 不完全微分PID控制原理 不完全微分的核心思想是…

DataOps for LLM 的数据工程技术架构实践

导读 在 LLM 蓬勃发展的今天&#xff0c;数据工程已成为支持大规模 AI 模型训练的基石。DataOps 作为数据工程的重要方法论&#xff0c;通过优化数据集成、转换和自动化运维&#xff0c;加速数据到模型的闭环流程。本文聚焦新一代数据 & AI 集成工具- Apache SeaTunnel 在…

go-zero(七) RPC服务和ETCD

go-zero 实现 RPC 服务 在实际的开发中&#xff0c;我们是通过RPC来传递数据的&#xff0c;下面我将通过一个简单的示例&#xff0c;说明如何使用go-zero框架和 Protocol Buffers 定义 RPC 服务。 一、生成 RPC项目 在这个教程中&#xff0c;我们根据user.api文件&#xff0…

【c++丨STL】list模拟实现(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、节点、迭代器以及函数声明 二、list功能实现 1. 节点 2. 迭代器 迭代器的默认构造 operator* operator-> 前置和-- 后置和--…

SpringBoot:不支持发行版本17超详细解决办法

一开始linux中就已经下好了JDK21&#xff0c;但是后来创建项目的时候选用了JDK23&#xff0c;导致环境错乱&#xff0c;估计大部分都是因为这个原因&#xff0c;接下来我会一步步带大家解决。 检查系统环境&#xff08;以Ubuntu为例&#xff09; 没有下载JDK的可以在官网下载…