Apache Paimon 0.9.0版本已经发布一周时间了,网上还没看到有人对此的解读,我们稍微看一下这个版本需要注意的特性,抛砖引玉。
核心改动主要有,以下内容来自Paimon官方:
Paimon Branch:此版本 Branch 功能正式生产可用,并且引入了 'scan.fallback-branch' 功能帮助业务更好的统一流批一体存储。 Universal Format:此版本引入了原生的 Iceberg 兼容,你可以开启 Iceberg 兼容模式,Paimon 将实时的额外产生 Iceberg 兼容的 Snapshots,你可以使用 Iceberg 相关生态来读取此 Paimon 表。 Caching Catalog:此版本默认引入了 Caching Catalog 的实现,Table 元数据以及 Manifest 文件都将被缓存到 Catalog 里面,这可以加速 OLAP Query 的性能。 Bucketed Append 表可用性改进,它的小文件问题得到大大缓解,并且它可以被 Spark 应用到 Bucketed Join 中 (减少了 Join 中的 Shuffle)。 Append 表的删改支持:此版本引入了 Append 的 DELETE & UPDATE & MERGEINTO 支持,你可以通过 Spark SQL 来删改 Append 表,并且它还支持 Deletion Vectors 模式。
目前0.9版本的更新偏向更加易用。这里面有2个比较大的使用上的feature需要大家关注。
Paimon Branch
在此之前其实Paimon支持了tag的能力:
创建标签(Tag)策略可以保留关键快照。创建Tag的快照,在进入过期清除流程时,快照的元数据与数据文件仍会被持续保存。在快照过期后,借助标签仍能追溯查询到特定时间点的数据。在实践中,每日生成一个标签尤为实用,能够确保对每一天历史数据的持久访问能力,为数据分析、审计追溯等应用场景提供了坚实支撑。
如果你对Git不陌生,可以把它想象成Git的branch功能。你可以创建多个branch,branch之间也可以进行数据的replace,达到类似数据订正的目的。
从作用上来讲,tag和branch的功能基本上是完全可以按照git里的能力来理解。
Bucketed Append表
0.8版本及以前的表类型分为两大类:主键表和非主键表。
其中非主键表又分为:Append Table 和 Append Queue。
他们的区别是什么呢?只看你是否设置Bucket。 如果你设置了就是Append Queue表,再根据你设置的bucket-key进行hash散列,达到单个bucket有序的目的。你看是不是很像Kafka?
这个能力很重要,一是我们在做流读流写的时候可以保证单bucket数据是有序的。此外我们在使用Spark进行批关联的时候可以用到Bucketed Join减少数据shuffle的目的,效率更高。
在旧版本中如果你设置了bucket但是不设置bucket-key,Paimon会按照所有字段进行hash散列,这并不合理。
而且这其实是一个很奇怪的设计,如果我指定分区(bucket),但是不指定分区键(bucket-key),那么分区的意义其实并不大。
Paimon社区显然注意到了这个问题,在新版本中如果你依然犯蠢,指定分区(bucket),但是不指定分区键(bucket-key),那么这个表对不起,你建不了!
官方给我们的建议是,如果你不是闲的没事干,那么最好不要创建Bucketed Append表。
好了上面这两个feature就是本次更新对大家影响最大的,更多的资讯还是以官方文档为主。😄