1 数据类型分类类型说明数值类型int存储标准大小的整数bigint存储非常大的整数decimal(p,s)存储精确的定点浮点数字符串类型varchar(n)存储可变长度的字符串,最大长度为 nstring存储任意长度的字符串,如长文本数据以及时间时间类型date存储日期,格式为 yyyy-MM-dd2 关系模型2.1 数据表2.1.1 新增2.1.1.1 表类型(1) 重复模型数据按原样存储,不进行聚合,适用于需要保留所有数据明细的场景.create table [if not exists] test_db.duplicate_tb ( dt datetime comment 日志时间, type int comment 日志类型, error_code int comment 错误码, error_msg varchar(1024) comment 错误详细信息, op_id bigint comment 负责人id, op_time datetime comment 处理时间 ) -- 数据模型 duplicate key(dt,type) comment Duplicate key表 -- 分桶 distributed by hash(type) buckets 1 ;(2) 聚合模型默认表模型,数据根据指定的聚合函数进行聚合存储,适用于需要对数据进行聚合计算的场景.create table [if not exists] test_db.aggregate_tb ( user_id largeint comment 用户id, w_insert_dt date comment 数据灌入日期时间, city varchar(20) comment 用户所在城市, age smallint comment 用户年龄, sex tinyint comment 用户性别, last_visit_date datetime replace comment 用户最后一次访问时间, last_visit_date2 datetime replace_if_not_null comment 用户最后一次访问时间2, cost bigint sum comment 用户总消费, max_dwell_time int max comment 用户最大停留时间, min_dwell_time int min comment 用户最小停留时间 ) aggregate key(user_id, w_insert_dt, city, age, sex) comment aggregate key表 distributed by hash(user_id) buckets 1 ;①sum:求和,多行的 value 进行累加.②replace:替代,下一批数据中的 value 会替换之前导入过的行中的 value.③replace_if_not_null:和replace类似,区别在于如果insert的是null,则不进行替换④max:保留最大值.⑤min:保留最小值.(3) 主键模型每个主键只有一条记录,其余字段覆盖更新.适用于需要唯一约束的场景,可以实现数据的更新和删除.create table if not exists test_db.unique_tb ( user_id int comment 用户id, username varchar(50) comment 用户昵称, city varchar(20) comment 用户所在城市, age smallint comment 用户年龄, sex tinyint comment 用户性别, phone largeint comment 用户电话, address varchar(500) comment 用户地址, register_time datetime comment 用户注册时间 ) primary key(user_id, username) comment unique数据表 distributed by hash(user_id) buckets 1 -- 默认读时合并,开启后是写时合并 properties(enable_unique_key_merge_on_write true) ;2.1.1.2 表参数(1) 设置方式①建表时设置:create table table_name (...) properties (...);②修改表时设置:alter table table_name set (...);(2) 参数参数类型参数名推荐参数值参数说明存储与副本replication_num3默认1.副本数量storage_mediumSSD默认HDD.存储介质in_memoryfalse默认不启用.是否启用内存存储compressionZSTD默认LZ4.压缩算法,ZSTD 压缩率更高,LZ4 性能较好enable_persistent_indextrue默认不启用.是否启用持久化索引,启用时可减少内存占用分区分桶dynamic_partition.enabletrue默认关闭.是否启用动态分区功能dynamic_partition.time_zoneAsia/Shanghai默认UTC.设置动态分区的时区dynamic_partition.time_unitMONTH默认按天.动态分区的时间单位,可选值为 DAY、WEEK、MONTH、YEARdynamic_partition.start_day_of_month-动态分区的起始日期,仅在 time_unit MONTH 或 YEAR 时生效dynamic_partition.start-3650默认3个,当前时间往前的分区数量dynamic_partition.end3默认3个,从当前时间往后的分区数量dynamic_partition.history_partition_num365默认不保留.历史分区的保留数量,超过该数量的分区会被自动删除2.1.2 修改-- 修改表注释 alter table db.tb comment tb;2.2 字段列(1) 新增-- 增加字段 alter table table_name add column column_name data_type comment description;(2) 删除-- 删除列 alter table table_name drop column column_name;(3) 修改-- 修改列名和数据类型 alter table table_name modify column column_name new_data_type;3 分区3.1 分区类型①列表分区:根据分区列的具体值将数据行分配到对应分区.分区列支持 boolean、bigint、date、varchar 等数据类型,分区值为枚举值.partition by list(city) ( partition p_cn values in (beijing, shanghai, hong kong), partition p_usa values in (new york, san francisco), partition p_jp values in (tokyo) )②范围分区:根据分区列的值范围将数据行分配到对应分区.分区列通常为时间列,支持4种分法.-- 左闭右开区间 partition by range(dt) ( partition p201701 values [(2017-01-01), (2017-02-01)), partition p201702 values [(2017-02-01), (2017-03-01)), partition p201703 values [(2017-03-01), (2017-04-01)) )3.2 分区模式动态分区:动态分区会按照设定的规则,滚动添加、删除分区.分区列只支持 date/datetime.-- 月动态分区 create table test.tb ( dt date comment 时间分区, w_integration_id string, ... ) engineolap duplicate key(dt) comment 月动态分区 partition by range(dt)() distributed by hash(w_integration_id) properties ( dynamic_partition.enable true, dynamic_partition.time_zone Asia/Shanghai, dynamic_partition.prefix p, dynamic_partition.time_unit MONTH, dynamic_partition.start_day_of_month 1, dynamic_partition.start -500, dynamic_partition.end 2, dynamic_partition.history_partition_num 100, replication_num 3, compression LZ4, storage_medium SSD, in_memory false, replicated_storage true, enable_persistent_index false ) ;-- 天动态分区 create table test.tb ( dt date comment 时间分区, w_integration_id string, ... ) engineolap duplicate key(dt) comment 天动态分区 partition by range(dt)() distributed by hash(w_integration_id) properties ( dynamic_partition.enable true, -- 启用动态分区 dynamic_partition.time_zone Asia/Shanghai, -- 设置时区 dynamic_partition.prefix p, -- 分区前缀 dynamic_partition.time_unit DAY, -- 分区单位按天分区 dynamic_partition.start -3650, dynamic_partition.end 2, -- 提前创建未来 2 天的分区 dynamic_partition.history_partition_num 365, -- 创建最近N天的历史分区 replication_num 3, -- 副本数量 compression LZ4, -- 压缩算法 storage_medium SSD, -- 存储介质 in_memory false, -- 是否启用内存存储 replicated_storage true, -- 是否启用副本存储 enable_persistent_index false -- 是否启用持久化索引 );3.3 语法(1) 新增-- 增加列表分区 alter table table_name add partition partition_name values in (value1, value2, ...); -- 增加范围分区 alter table table_name add partition partition_name values [(2017-04-01), (2017-05-01));(2) 删除①删除分区alter table table_name drop partition partition_name;②清空指定分区的数据truncate table test.test_dynamic_partition partition(partition_name);(3) 查询-- 查询分区信息 show partitions from table_name;4 分桶4.1 语法(1) 新增distributed by hash(w_integration_id) buckets n①选择高基数列(主键)或高频查询维度作为分桶键;②分桶数 n.单分区大小/副本数/分桶数分桶大小,分桶大小控制在0.1G-1G之间.5 索引5.1 索引类型位图索引:适用于低基数列(如性别、状态、分类等)的过滤操作.5.2 语法-- 创建 -- 建表时设置索引 create table 表名 ( dt string ,... ,index dt_index (dt) using bitmap engineolap duplicate key(dt) ;
Doris_数据模型
1 数据类型分类类型说明数值类型int存储标准大小的整数bigint存储非常大的整数decimal(p,s)存储精确的定点浮点数字符串类型varchar(n)存储可变长度的字符串,最大长度为 nstring存储任意长度的字符串,如长文本数据以及时间时间类型date存储日期,格式为 yyyy-MM-dd2 关系模型2.1 数据表2.1.1 新增2.1.1.1 表类型(1) 重复模型数据按原样存储,不进行聚合,适用于需要保留所有数据明细的场景.create table [if not exists] test_db.duplicate_tb ( dt datetime comment 日志时间, type int comment 日志类型, error_code int comment 错误码, error_msg varchar(1024) comment 错误详细信息, op_id bigint comment 负责人id, op_time datetime comment 处理时间 ) -- 数据模型 duplicate key(dt,type) comment Duplicate key表 -- 分桶 distributed by hash(type) buckets 1 ;(2) 聚合模型默认表模型,数据根据指定的聚合函数进行聚合存储,适用于需要对数据进行聚合计算的场景.create table [if not exists] test_db.aggregate_tb ( user_id largeint comment 用户id, w_insert_dt date comment 数据灌入日期时间, city varchar(20) comment 用户所在城市, age smallint comment 用户年龄, sex tinyint comment 用户性别, last_visit_date datetime replace comment 用户最后一次访问时间, last_visit_date2 datetime replace_if_not_null comment 用户最后一次访问时间2, cost bigint sum comment 用户总消费, max_dwell_time int max comment 用户最大停留时间, min_dwell_time int min comment 用户最小停留时间 ) aggregate key(user_id, w_insert_dt, city, age, sex) comment aggregate key表 distributed by hash(user_id) buckets 1 ;①sum:求和,多行的 value 进行累加.②replace:替代,下一批数据中的 value 会替换之前导入过的行中的 value.③replace_if_not_null:和replace类似,区别在于如果insert的是null,则不进行替换④max:保留最大值.⑤min:保留最小值.(3) 主键模型每个主键只有一条记录,其余字段覆盖更新.适用于需要唯一约束的场景,可以实现数据的更新和删除.create table if not exists test_db.unique_tb ( user_id int comment 用户id, username varchar(50) comment 用户昵称, city varchar(20) comment 用户所在城市, age smallint comment 用户年龄, sex tinyint comment 用户性别, phone largeint comment 用户电话, address varchar(500) comment 用户地址, register_time datetime comment 用户注册时间 ) primary key(user_id, username) comment unique数据表 distributed by hash(user_id) buckets 1 -- 默认读时合并,开启后是写时合并 properties(enable_unique_key_merge_on_write true) ;2.1.1.2 表参数(1) 设置方式①建表时设置:create table table_name (...) properties (...);②修改表时设置:alter table table_name set (...);(2) 参数参数类型参数名推荐参数值参数说明存储与副本replication_num3默认1.副本数量storage_mediumSSD默认HDD.存储介质in_memoryfalse默认不启用.是否启用内存存储compressionZSTD默认LZ4.压缩算法,ZSTD 压缩率更高,LZ4 性能较好enable_persistent_indextrue默认不启用.是否启用持久化索引,启用时可减少内存占用分区分桶dynamic_partition.enabletrue默认关闭.是否启用动态分区功能dynamic_partition.time_zoneAsia/Shanghai默认UTC.设置动态分区的时区dynamic_partition.time_unitMONTH默认按天.动态分区的时间单位,可选值为 DAY、WEEK、MONTH、YEARdynamic_partition.start_day_of_month-动态分区的起始日期,仅在 time_unit MONTH 或 YEAR 时生效dynamic_partition.start-3650默认3个,当前时间往前的分区数量dynamic_partition.end3默认3个,从当前时间往后的分区数量dynamic_partition.history_partition_num365默认不保留.历史分区的保留数量,超过该数量的分区会被自动删除2.1.2 修改-- 修改表注释 alter table db.tb comment tb;2.2 字段列(1) 新增-- 增加字段 alter table table_name add column column_name data_type comment description;(2) 删除-- 删除列 alter table table_name drop column column_name;(3) 修改-- 修改列名和数据类型 alter table table_name modify column column_name new_data_type;3 分区3.1 分区类型①列表分区:根据分区列的具体值将数据行分配到对应分区.分区列支持 boolean、bigint、date、varchar 等数据类型,分区值为枚举值.partition by list(city) ( partition p_cn values in (beijing, shanghai, hong kong), partition p_usa values in (new york, san francisco), partition p_jp values in (tokyo) )②范围分区:根据分区列的值范围将数据行分配到对应分区.分区列通常为时间列,支持4种分法.-- 左闭右开区间 partition by range(dt) ( partition p201701 values [(2017-01-01), (2017-02-01)), partition p201702 values [(2017-02-01), (2017-03-01)), partition p201703 values [(2017-03-01), (2017-04-01)) )3.2 分区模式动态分区:动态分区会按照设定的规则,滚动添加、删除分区.分区列只支持 date/datetime.-- 月动态分区 create table test.tb ( dt date comment 时间分区, w_integration_id string, ... ) engineolap duplicate key(dt) comment 月动态分区 partition by range(dt)() distributed by hash(w_integration_id) properties ( dynamic_partition.enable true, dynamic_partition.time_zone Asia/Shanghai, dynamic_partition.prefix p, dynamic_partition.time_unit MONTH, dynamic_partition.start_day_of_month 1, dynamic_partition.start -500, dynamic_partition.end 2, dynamic_partition.history_partition_num 100, replication_num 3, compression LZ4, storage_medium SSD, in_memory false, replicated_storage true, enable_persistent_index false ) ;-- 天动态分区 create table test.tb ( dt date comment 时间分区, w_integration_id string, ... ) engineolap duplicate key(dt) comment 天动态分区 partition by range(dt)() distributed by hash(w_integration_id) properties ( dynamic_partition.enable true, -- 启用动态分区 dynamic_partition.time_zone Asia/Shanghai, -- 设置时区 dynamic_partition.prefix p, -- 分区前缀 dynamic_partition.time_unit DAY, -- 分区单位按天分区 dynamic_partition.start -3650, dynamic_partition.end 2, -- 提前创建未来 2 天的分区 dynamic_partition.history_partition_num 365, -- 创建最近N天的历史分区 replication_num 3, -- 副本数量 compression LZ4, -- 压缩算法 storage_medium SSD, -- 存储介质 in_memory false, -- 是否启用内存存储 replicated_storage true, -- 是否启用副本存储 enable_persistent_index false -- 是否启用持久化索引 );3.3 语法(1) 新增-- 增加列表分区 alter table table_name add partition partition_name values in (value1, value2, ...); -- 增加范围分区 alter table table_name add partition partition_name values [(2017-04-01), (2017-05-01));(2) 删除①删除分区alter table table_name drop partition partition_name;②清空指定分区的数据truncate table test.test_dynamic_partition partition(partition_name);(3) 查询-- 查询分区信息 show partitions from table_name;4 分桶4.1 语法(1) 新增distributed by hash(w_integration_id) buckets n①选择高基数列(主键)或高频查询维度作为分桶键;②分桶数 n.单分区大小/副本数/分桶数分桶大小,分桶大小控制在0.1G-1G之间.5 索引5.1 索引类型位图索引:适用于低基数列(如性别、状态、分类等)的过滤操作.5.2 语法-- 创建 -- 建表时设置索引 create table 表名 ( dt string ,... ,index dt_index (dt) using bitmap engineolap duplicate key(dt) ;