目录
1. 表Schema介绍
Kudu的表是一种结构化数据模型,包含3个方面:分区设计、primary key设计、column设计
2. Column设计
2.1 支持的列数据类型
支持的列数据类型如下:
- boolean
- 8-bit有符号integer
- 16-bit有符号integer
- 32-bit有符号integer
- 64-bit有符号integer
- date(32-bit days since the Unix epoch)
- unixtime_micros(64-bit microseconds since the Unix epoch)
- single-precision(单精度,32位,IEEE-754浮点数)
- double-precision(双精度,64位,IEEE-754浮点数)
- decimal
- varchar
- UTF-8 encoded string(不压缩的大小能到64KB)
- binary(不压缩的大小能到64KB)
列储存时,默认是不压缩的
3. Primary key设计
可以声明一个或多个列作为primary key。primary key的数据类型不能是boolean、float、double。
insert相同的primary key数据到表,会出现重复键错误
行删除和更新必须指定主键,不支持范围删除和更新
3.1 Primary Key Index
索引是clustered index(聚集索引)。 tablet中的所有行按primary key排序。在primary key进行相等或范围条件过滤,扫描时自动跳过不能满足条件的行
4. Partitioning分区
表的数据可以进行分区,一个分区对应一个tablet。多个tablet分布在多个tablet server上。行只能属于一个tablet
如果写入较多,推荐设计分区将写入分散到多个分区。如果读取较多,推荐设计分区将读取定位到少量的分区
表创建时没有默认分区,需要指定分区策略。支持range分区和hash分区
4.1 range分区
range分区的分区键必须是primary key中的
需要指定一个或多个split点、上界、下界。如果不指定分区上下界,则默认无界限
Range Partition Management范围分区管理
添加分区:不能和已经存在的分区重叠
删除分区:tablet的数据也会被删除
4.2 hash分区
hash分区的分区键必须是primary key中的
5. Schema Alterations(schema变更)
支持以下操作:
- 重命名表
- 重命名主键列
- 重命名、添加和删除非主键列
可以在单个事务操作中进行多个schema变更
6. Kudu的限制
- 列数:默认情况下,不建议创建超过300个列的表。过多的列会影响性能且不安全。可以通过给master传递参数
--unlock_unsafe_flags --max_num_columns=500
进行修改 - cell大小:编码或压缩之前不能超过64KB,编码压缩后不能超过16KB
- row大小:单行数据不要大于几百KB
- 表名和列名:必须使用UTF8编码,不能大于256字节
- 主键:不可更新主键列的值。不可更改主键列成其它列
- hash分区:表一旦创建,就不可更改hash分区的规则
- 分区:分区不能进行拆分和合并
- 列类型:不允许更改列的类型