Apache Paimon基础记录

基本都是在官网的学习,简单记录一下其中的核心特点

Apache Paimon 官网

Apache Paimon | Apache Paimon

根据官网介绍去快速了解 paimon 是用来设计做什么,可以做什么,对比与其他数据湖有什么特点,如何使用

Paimon

特点

前身是Flink table Store,很多文档和特性都是一样的

支持批流一体,主要用来做实时数据湖

Paimon 并使用 LSM 树结构来支持大量数据更新和高性能查询

和Flink CDC整合,实时入湖更简单

支持 mysql 等直接同步到 paimon,且支持表结构变更

Paimon 的变更日志还可以存储到外部日志系统(例如 Kafka)中或从外部日志系统(例如 Kafka)中消费

支持 hive presto spark flink 等多种计算引擎

支持hdfs oss s3等多种储存

基本概念和存储特点

Basic Concepts | Apache Paimon

File Layouts | Apache Paimon

整体看下来,很多地方和 icerberg 有相似之处,但是在 primary 表功能更强,且支持flink纯流式读取,和lookup join

Table

Table 的一些基本参数

CREATE TABLE MyTable (pk BIGINT PRIMARY KEY NOT ENFORCED,f1 DOUBLE,f2 BIGINT,ts TIMESTAMP
) WITH (
-- 指定顺序字段,避免乱序'sequence.field' = 'ts',
--设置默认值'fields.f2.default-value'='0' ,
-- 合并引擎,仅限于 Primary Key Table'merge-engine'='deduplicate',);

主键表 Primary Key Table

主键由一组包含每个记录的唯一值的列组成。Paimon 通过对每个存储桶内的主键进行排序来强制数据排序,允许用户通过对主键应用过滤条件来实现高性能

Merge Engines 

Merge Engines 

deduplicate

默认的合并引擎使用主键的最新一条记录作为当前数据

partial-update 

部分更新,null 值不覆盖已有数据

INSERT INTO T VALUES (1, 1,null,null);

INSERT INTO T VALUES (1, null,null,1);

SELECT * FROM T; -- output 1, 1, null, 1

aggregation 

聚合模型(比如doris),需要指定非主键列的聚合类型

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' );

first-row 

保留同一主键的第一行,不接受

DELETE 和 UPDATE_BEFORE

与 deduplicate合并引擎不同的是,在 first-row合并引擎中,它将生成仅插入变更日志

Changelog Producers

支持 none input lookup Full Compaction 

这个是什么,有何用途?????和flink文档??

Table Types | Apache Flink Table Store

Primary Key Table | Apache Paimon

追加表 Append Only Table

和 iceberg 类似,目前来看没有什么特殊之处

外部日志 External Log Systems

External Log Systems | Apache Paimon ,但是spark等估计不支持吧

除了底层的表文件之外,Paimon 的变更日志还可以存储到外部日志系统(例如 Kafka)中或从外部日志系统(例如 Kafka)中消费。比如 通过指定'log.system' = 'kafka',用户可以将更改与表文件一起写入 Kafka(应用场景是啥,基本没这样用过啊)

CREATE TABLE T (...)
WITH ('log.system' = 'kafka','kafka.bootstrap.servers' = '...','kafka.topic' = '...'
);

读写demo

使用方式上和iceberg没啥区别,一般还是使用HIVE RDS 来管理元数据

另外支持历史快照(批处理模式)或者从最新的偏移量(在流模式下)读取等多种方式

注册元数据和表

CREATE CATALOG paimon_catalogWITH ('type' = 'paimon','metastore' = 'hive','uri' = 'thrift://<hive-metastore-host-name>:<port>',-- 'hive-conf-dir' = '...', this is recommended in the kerberos environment-- 'hadoop-conf-dir' = '...', this is recommended in the kerberos environment'warehouse' = 'hdfs:///path/to/warehouse'
);USE CATALOG paimon_catalog;CREATE TABLE paimon_catalog.user_log (user_id BIGINT,item_id BIGINT,behavior STRING,dt STRING,hh STRING,PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
)
--需要分区加上 PARTITIONED BY 关键字即可PARTITIONED BY (dt, hh);

spark读取 / 写入

insert into paimon_catalog.user_log .....
select * from paimon_catalog.user_log 

flink 读取

查询时指定分区和主键过滤器,且为主键最左边的前缀指定范围过滤器,查询效率会好很多

-- paimon requires checkpoint interval in streaming mode
SET 'execution.checkpointing.interval' = '10 s';
-- write streaming data to dynamic table
INSERT INTO word_count SELECT word, COUNT(*) FROM user_log GROUP BY word;
SET 'execution.runtime-mode' = 'streaming';
SET 'execution.runtime-mode' = 'batch';-- track the changes of table and calculate the count interval statistics
SELECT `interval`, COUNT(*) AS interval_cnt FROM(SELECT cnt / 10000 AS `interval` FROM user_log ) GROUP BY `interval`;

flink lookup join + paimon

lookup join 是 flink 的特性,但是结合 paimon 使用性能还不错(比hbase、redis差,mysql没比较过)

流式读取cdc数据写入paimon,既可以做离线查询、olap,又支持flink流式获取数据和lookup join

flink+paimon

paimon lookup join 重写了flink 的 lookup join

flink 的 lookup join 是可以缓存,为命中可以点查DB,可以看官网或者源码

paimon不同,paimon 是在启动时将所有数据放到rocksdb,且是分key存储的,没有命中缓存直接查rocksdb,增量的数据不断拉到rocksdb进行合并

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

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

相关文章

酒鬼酒2024年展望:稳发展动能,迈入恢复性增长轨道

文 | 琥珀酒研社 作者 | 渡过 最近几个月来&#xff0c;白酒估值回落到近十年来低位&#xff0c;反映出了整个白酒行业的市场低迷和虚弱现状。不管是头部企业五粮液、泸州老窖&#xff0c;还是区域酒企口子窖、金种子酒等&#xff0c;最近都通过“回购”或“增持”&#xff0…

【C语言】【力扣】刷题小白的疑问

一、力扣做题时的答案&#xff0c;没有完整的框架 疑问&#xff1a; 在学习C语言的初始&#xff0c;就知道C语言程序离不开下面这个框架&#xff0c;为什么力扣题的解答往往没有这个框架&#xff1f; #include <stdio.h>int main() {return 0; } 解答&#xff1a; 力扣平…

常用直线检测算法

概述 在计算机视觉领域&#xff0c;我们经常需要做一些特殊的任务&#xff0c;而这些任务中经常会用到直线检测算法&#xff0c;比如车道线检测、长度测量等。– 资料 直线检测算法汇总_技术挖掘者的博客-CSDN博客_直线检测算法 直线检测算法博文中缺失的几个源码(Hough_lin…

联想乐商店更新安卓APK错误处理

当你点击“重新提交”&#xff0c;联想开放平台会卡死 其实他们的网页是有BUG的。HTTP GET appDetail请求会有个服务器内部错误 联系了联想客服&#xff0c;他们的绕过去方案是&#xff0c;你要选择“已上架” 然后再更新版本就可以了

手把手带你死磕ORBSLAM3源代码(六十三) LocalMapping.cc LocalMapping

目录 一.前言 二.代码 2.1 完整代码 一.前言 LocalMapping类主要负责处理局部地图的构建和优化。它接收来自相机的图像数据,提取特征点,并与先前帧的特征点进行匹配,以估计相机的运动并更新地图。 以下是关于代码的一些详细说明: LocalMapping的构造函数(LocalMappin…

Alzet 代理商,你知道是什么吗?

代理商、供应商傻傻分不清楚。在购买产品时或者在搜索商品时&#xff0c;有些产品会出现代理商、供应商的字样。你知道它们的区别么&#xff1f; 下面&#xff0c;我们就简单了解下Alzet 供应商与Alzet 代理商分别是什么&#xff1f;以及Alzet 渗透泵的产品概况吧。 Alzet 供…

【Python机器学习系列】建立XGBoost模型预测心脏疾病(完整实现过程)

一、引言 前文回顾&#xff1a; 一文彻底搞懂机器学习中的归一化与反归一化问题 【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式&#xff08;理论源码&#xff09; 【Python机器学习系列】一文带你了解机器学习中的Pipeline管道机制&#xff08;理论源码…

【Python】03快速上手爬虫案例三:搞定药师帮

文章目录 前言1、破解验证码2、获取数据 前言 提示&#xff1a;通过用户名、密码、搞定验证码&#xff0c;登录进药师帮网站&#xff0c;然后抓取想要的数据。 爬取数据&#xff0c;最终效果图&#xff1a; 1、破解验证码 使用药师帮测试系统&#xff1a;https://dianrc.ysb…

2024 高级前端面试题之 HTML 「精选篇」

该内容主要整理关于 HTML 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTML模块精选篇 1. 如何理解HTML语义化2. H5的新特性有哪些3. 说一下 HTML5 Drag API4. iframe有那些缺点5. 如何实现浏览器内多个标签页之间的通信6. 简述一下s…

Elasticsearch:如何为 Elastic Stack 配置 AI Assistant

了解并安装 Elastic AI Assistant Elastic 推出了 Observability AI Assistant&#xff0c;这是一款利用生成式 AI 来增强你的 Observability 体验的强大工具。 该 AI 助手由 OpenAI 或 Azure OpenAI 服务的连接器提供支持&#xff0c;可带来上下文洞察和聊天功能&#xff0c;…

104.乐理基础-五线谱-中音谱号、次中音谱号

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;103.乐理基础-五线谱-低音谱号-CSDN博客 上一个内容练习答案&#xff1a; 常用的谱号就是下图所示的四个&#xff0c;其中高音谱号与低音谱号已经在上一个内容和上上一个内容中写过了&#xff0c;音乐中百分之九十…

html css实现钟表简单移动

文章目录 一、实现钟表简单移动二、HTML三、CSS四、热门文章 一、实现钟表简单移动 下面是一个使用HTML和CSS实现简单移动的钟表的示例代码&#xff1a; <!DOCTYPE html> <html><head><style>.clock {width: 200px;height: 200px;border-radius: 50%…

微服务架构实施攻略:如何选择合适的微服务安全保障策略?

随着业务的快速发展和系统的日益复杂&#xff0c;传统的单体应用逐渐显露出瓶颈&#xff0c;已无法满足现代软件研发的需求。微服务架构作为一种灵活、可扩展的解决方案&#xff0c;通过将复杂系统拆分为一系列小型服务来提高系统的可伸缩性、灵活性和可维护性。在实施微服务架…

【C++历练之路】探秘C++三大利器之一——多态

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;: 在计算机科学的广袤领域中&#xff0c;C多态性是一门令人着迷的技术艺术&#xff0c;它赋予我们的代码更强大的灵活性和可维护性。想象一下&#xff0c;你正在构建一个程序&#xff0c;需要适应不断…

python3.8 安装缺少ssl、_ctypes模块解决办法

问题 安装pyhton3.8安装默认不依赖ssl 运行Flask项目时报错&#xff1a; Traceback (most recent call last):File "/usr/local/python3/bin/flask", line 8, in <module>sys.exit(main())File "/usr/local/python3/lib/python3.8/site-packages/flask…

电脑文件丢失怎么恢复数据?数据恢复,3个方法!

“我有一份很重要的资料文件保存在电脑上了&#xff0c;但是刚刚发现这些文件莫名其妙丢失了。电脑文件丢失应该怎么恢复数据呀&#xff1f;大家有什么比较好用的方法可以推荐吗&#xff1f;” 在日常生活中&#xff0c;我们经常都需要使用电脑&#xff0c;当然&#xff0c;也会…

虹科干货 | 如何使用nProbe Cento构建100 Gbit NetFlow 传感器

本文是一份全面的指南&#xff0c;解释了如何使用nProbe Cento构建一个高效的100 Gbit NetFlow传感器。旨在帮助大家充分利用NetFlow技术&#xff0c;以监控和分析高速网络流量。 当需要监控分布式网络&#xff0c;了解流经上行链路或关键网段的网络流量时&#xff0c;NetFlow…

TensorFlow2实战-系列教程 总目录

TensorFlow 深度学习 开发环境搭建 全教程 TensorFlow2实战-系列教程 总目录 TensorFlow2实战-系列教程1&#xff1a;回归问题预测TensorFlow2实战-系列教程2&#xff1a;神经网络分类任务TensorFlow2实战-系列教程3&#xff1a;猫狗识别1TensorFlow2实战-系列教程4&#xff1…

Linux系列之查看cpu、内存、磁盘使用情况

查看磁盘空间 df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息。使用df -h命令&#xff0c;加个-h参数是为了显示GB MB KB单位&#xff0c;这样更容易查看 Filesystem …

MySQL入门篇(2)-MySQL的安装和配置

MySQL是一种开源的关系型数据库管理系统&#xff0c;它广泛应用于Web开发领域。本文将介绍MySQL的安装和配置过程&#xff0c;并提供详细的示例。 1. 下载MySQL安装程序 首先&#xff0c;我们需要从MySQL官方网站下载适合操作系统的安装程序。MySQL提供了Windows、Linux和Mac…