概述
大数据中分区为加速查询,提供了很好的途径,对于大表,生产中加上分区,并按分区查询,性能提升巨大,分区的字段最好具有平均分布数据的功能,能解决大部分或者一部分查询慢的问题,收益最大; 对于大表的另一个问题,就是数据无限膨胀,但磁盘有限,在paimon中这些问题都有解决方案,就是分区和分区自动失效功能
相关链接
在阅读之前,可以查看链接相关文章
paimon相关文章请 移步
paimon官方文档如何设置分区
paimon官方相关文档分区失效
实战
接下来,会对如何分区(包括动态分区),如何设置分区失效进行测试
注意: 如果定义了主键,分区键必须是主键的子集。这和hudi相比,还是有了些限制,不过影响不大;使用hive catalog,如有问题请移步 至此,看如何整合 hive与paimon
代码
CREATE CATALOG paimon_hive WITH (
‘type’ = ‘paimon’,
‘metastore’ = ‘hive’,
‘uri’ = ‘thrift://10.32.xx.142:9083’,
‘warehouse’ = ‘hdfs:///data/hive/warehouse/paimon/hive’,
‘default-database’=‘test’
);
USE CATALOG paimon_hive;
DROP TABLE IF EXISTS STUDENT2Kafka;
CREATE TEMPORARY TABLE IF NOT EXISTS STUDENT2Kafka (
`ID` STRING
,`NAME` STRING
,`AGE` STRING
,`BIRTHDAY` TIMESTAMP
,PRIMARY KEY ( `ID` ) NOT ENFORCED
) WITH (
'connector' = 'kafka',
'topic' = 'STUDENT2',
'properties.bootstrap.servers' = '10.57.12.18:9092',
'properties.group.id' = 'STUDENT2_GROUP',
'scan.startup.mode' = 'earliest-offset',
'format' = 'ogg-json'
);
CREATE TABLE IF NOT EXISTS student2(
`id` string
,`name` string
,`age` string
,`birthday` string
,dt string
,PRIMARY KEY ( `name`,`id`,`dt` ) NOT ENFORCED )
PARTITIONED BY (dt) WITH (
'connector' = 'paimon',
'metastore.partitioned-table' = 'true',
'file.format' = 'parquet',
'write-buffer-size' = '512mb',
'write-buffer-spillable' = 'true' ,
'partition.expiration-time' = '1 d',
'partition.expiration-check-interval' = '1 h',
'partition.timestamp-formatter' = 'yyyy-MM-dd',
'partition.timestamp-pattern' = '$dt'
);
INSERT INTO student2 SELECT
ID,NAME,AGE,DATE_FORMAT(BIRTHDAY,'yyyy-MM-dd HH:mm:ss'),DATE_FORMAT(BIRTHDAY,'yyyy-MM-dd')
FROM STUDENT2Kafka;
执行效果
上面设置分区及分区失效二合一了,注意分区失效设置时 ‘partition.timestamp-pattern’ = ‘$dt’
注意: 分区过期后,它在逻辑上被删除,并且最新的快照无法查询其数据。但是文件系统中的文件不会立即被物理删除,这取决于相应的快照何时过期,也就是说,分区失效要满足上述这些条件,才会真正的删除,测试时,将checkpoint设置短,一个checkpoint就插入一点数据,10条以后,若没有改配置,开始有效果了
结束
分区自动失效这个功能还是很实用的,特别是对于一些表数据增加快的,减少了手动维护,至此,三篇paimon跟着操作一次,对于paimon基本上就入门了
paimon相关文章请 移步