在fluss中也有分区的概念,在前面的《实时流存储fluss学习系列(七)Fluss主键表介绍及使用教程》中我们演示创建表的时候演示了带有分区的创建表。
目前的fluss官方提供的版本主要是0.5,所以本文仅对0.5版本的fluss分区做相关的介绍。
对于分区的介绍
在 Fluss 中,分区表根据一个或多个分区键组织数据,从而提供一种提高大型数据集查询性能和可管理性的方法。分区允许系统将数据划分为不同的段,每个段对应于分区键的特定值。
对于分区表,Fluss支持自动分区创建,根据建表时配置的自动分区规则自动创建分区,并自动删除过期的分区,保证数据不会无限膨胀。
fluss分区的特点
提高查询性能:通过将查询范围缩小到特定分区,系统读取更少的数据,从而减少查询执行时间。
数据组织:分区有助于逻辑地组织数据,使其更易于管理和查询。
可扩展性:对大型数据集进行分区可将数据分布到更小、更易于管理的块中,从而提高可扩展性。
仅支持一个分区键,且分区键的类型必须为STRING。
如果该表是主键表,则分区键必须是主键的子集。
自动分区规则只能在创建分区表时配置,不支持在创建表之后修改自动分区规则。
fluss的分区使用
目前在官网的fluss文档中(仅针对fluss0.5版本),只有自动分区的演示,没有找到手动分区的演示,本人尝试过使用mysql的手动分区语法,doris的手动分区语法,clickhouse的手动分区语法想要在fluss上创建分区,均以失败告终(报各种sql语法错误)。奈何网上关于fluss的相关教程很少,所以手动分区暂时不考虑了,直接使用自动分区吧。参考官方创建自动分区的案例:
CREATE TABLE site_access( event_day STRING, site_id INT, city_code STRING, user_name STRING, pv BIGINT, PRIMARY KEY(event_day, site_id) NOT ENFORCED ) PARTITIONED BY (event_day) WITH ( 'table.auto-partition.enabled' = 'true', 'table.auto-partition.time-unit' = 'YEAR', 'table.auto-partition.num-precreate' = '5', 'table.auto-partition.num-retention' = '2', 'table.auto_partitioning.time-zone' = 'Asia/Shanghai' );
代表的含义如下:
选项 | 类型 | 必需的 | 默认 | 描述 |
---|---|---|---|---|
表.自动分区.启用 | 布尔值 | 不 | 错误的 | 是否为表启用自动分区,默认禁用。启用自动分区后,表的分区将自动创建。 |
表.自动分区.时间单位 | 枚举 | 不 | (没有任何) | 自动创建分区的时间粒度。有效值为“HOUR”、“DAY”、“MONTH”、“QUARTER”、“YEAR”。如果值为“HOUR”,则自动创建的分区格式为 yyyyMMddHH。如果值为“DAY”,则自动创建的分区格式为 yyyyMMdd。如果值为“MONTH”,则自动创建的分区格式为 yyyyMM。如果值为“QUARTER”,则自动创建的分区格式为 yyyyQ。如果值为“YEAR”,则自动创建的分区格式为 yyyy。 |
表.自动分区.num-precreate | 整数 | 不 | 4 | 每次检查自动分区时,为自动创建的分区预创建的分区数。例如,如果当前检查时间为 2024-11-11,且该值配置为 3,则将预创建分区 20241111、20241112、20241113。如果任何一个分区存在,则将跳过创建该分区。 |
表.自动分区.数量保留 | 整数 | 不 | -1 | 每次自动分区检查时,自动创建的分区保留的历史分区数,默认值为 -1,表示保留所有分区。例如,当前检查时间为 2024-11-11,时间单位为 DAY,配置值为 3,则保留历史分区 20241108、20241109、20241110,20241108 之前的分区将被删除。 |
表.自动分区.时区 | 细绳 | 不 | 系统时区 | 自动分区的时区,默认与系统时区相同。 |
分区的时间单位说明:
自动分区表的时间单位auto-partition.time-unit
可以取值为 HOUR、DAY、MONTH、QUARTER 或 YEAR。自动分区将使用以下格式创建分区。
时间单位 | 分区格式 | 例子 |
---|---|---|
小时 | yyyyMMddHH | 2024091922 |
天 | 年月日 | 20240919 |
月 | 年月 | 202409 |
四分之一 | yyyy | 20241 |
年 | 年 | 2024 |
我在fluss分区使用上的注意事项和采坑记录
这里算是本文我非常想要记录的信息,以下出现的情况可能是我使用方式不对或者fluss目前开源的比较少,总之主要是记录一下,希望大家找到解决方案的可以在文末留言下。
1)使用自动分区只能使用时间进行分区,需要制定time-unit的值。
2)分区的字段虽然是时间型,但是必须是string类型,不能是date类型,所以在实际使用的时候必须要把date进行format成对应的时间字符串。
3)自动创建的分区是从当前开始,比如指定:'table.auto-partition.time-unit' = 'YEAR',那么创建的分区会从当前开始,当前是2024年,那么创建的分区就是2024,2025,2026这种,不会出现2023,由于手动分区我测试不成功,所以如果实际中有2023的话,这个数据就不能插入进去了。
4)比如某张表现有的分区是2024,2025,2026三个分区,此时向当前表插入分区为2023的数据,会直接提示插入成功,不会返回错误信息,后台日志也没有错误信息。但是查的时候会发现查询不到2023这条数据。也就是向不存在的分区插入数据不会报错,而是直接提示成功,但是最后查询不到这条数据。
5)使用show partitons ${tablename} 查不到分区信息。
以上是我在测试分区的时候出现的情况,后续再涉及到会继续补充。
还没有评论,来说两句吧...