目录
1. 表Schema介绍
- 1. 表Schema介绍
- 2. Column设计
- 2.1 支持的列数据类型
- 3. Primary key设计
- 3.1 Primary Key Index
- 4. Partitioning分区
- 4.1 range分区
- 4.2 hash分区
- 5. Schema Alterations(schema变更)
- 6. Kudu的限制
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分区的规则
- 分区:分区不能进行拆分和合并
- 列类型:不允许更改列的类型