目 录CONTENT

文章目录

Doris数据库总结

Administrator
2024-09-02 / 0 评论 / 2 点赞 / 18 阅读 / 0 字

create table if not exists tmp_zdgx(
    xxmc_school varchar(150) not null  ,
    szd_adress varchar(60) not null
    )
    ENGINE=OLAP
    COMMENT "重点高校名单表"
    DISTRIBUTED BY HASH(`xxmc_school`) BUCKETS 1
    PROPERTIES (
                   "replication_allocation" = "tag.location.default: 3",
                   "in_memory" = "false",
                   "storage_format" = "V2"
               );
              
drop table tmp_zdgx ;          
              
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国人民大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('清华大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京航空航天大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京理工大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国农业大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京师范大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中央民族大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南开大学','天津');
insert into tmp_zdgx (xxmc_school, szd_adress) values('天津大学','天津');
insert into tmp_zdgx (xxmc_school, szd_adress) values('大连理工大学','辽宁');
insert into tmp_zdgx (xxmc_school, szd_adress) values('吉林大学','吉林');
insert into tmp_zdgx (xxmc_school, szd_adress) values('哈尔滨工业大学','黑龙江');
insert into tmp_zdgx (xxmc_school, szd_adress) values('复旦大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('同济大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海交通大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华东师范大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('东南大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('浙江大学','浙江');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国科学技术大学','安徽');
insert into tmp_zdgx (xxmc_school, szd_adress) values('厦门大学','福建');
insert into tmp_zdgx (xxmc_school, szd_adress) values('山东大学','山东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国海洋大学','山东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('武汉大学','湖北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华中科技大学','湖北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中南大学','湖南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中山大学','广东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华南理工大学','广东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('四川大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('电子科技大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('重庆大学','重庆');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西安交通大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西北工业大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('兰州大学','甘肃');
insert into tmp_zdgx (xxmc_school, szd_adress) values('国防科技大学','湖南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('东北大学','辽宁');
insert into tmp_zdgx (xxmc_school, szd_adress) values('郑州大学','河南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('湖南大学','湖南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('云南大学','云南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西北农林科技大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('新疆大学','新疆');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京交通大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京工业大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京科技大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京化工大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京邮电大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京林业大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京协和医学院','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京中医药大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('首都师范大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京外国语大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国传媒大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中央财经大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('对外经济贸易大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('外交学院','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国人民公安大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('北京体育大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中央音乐学院','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国音乐学院','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中央美术学院','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中央戏剧学院','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国政法大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国科学院大学','北京');
insert into tmp_zdgx (xxmc_school, szd_adress) values('福州大学','福建');
insert into tmp_zdgx (xxmc_school, szd_adress) values('暨南大学','广东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('广州中医药大学','广东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华南师范大学','广东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('广西大学','广西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('贵州大学','贵州');
insert into tmp_zdgx (xxmc_school, szd_adress) values('海南大学','海南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('河南大学','河南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('哈尔滨工程大学','黑龙江');
insert into tmp_zdgx (xxmc_school, szd_adress) values('东北农业大学','黑龙江');
insert into tmp_zdgx (xxmc_school, szd_adress) values('东北林业大学','黑龙江');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国地质大学','湖北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('武汉理工大学','湖北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华中农业大学','湖北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华中师范大学','湖北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中南财经政法大学','湖北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('湖南师范大学','湖南');
insert into tmp_zdgx (xxmc_school, szd_adress) values('延边大学','吉林');
insert into tmp_zdgx (xxmc_school, szd_adress) values('东北师范大学','吉林');
insert into tmp_zdgx (xxmc_school, szd_adress) values('苏州大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京航空航天大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京理工大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国矿业大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京邮电大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('河海大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('江南大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京林业大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京信息工程大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京农业大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京中医药大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国药科大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南京师范大学','江苏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('南昌大学','江西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('辽宁大学','辽宁');
insert into tmp_zdgx (xxmc_school, szd_adress) values('大连海事大学','辽宁');
insert into tmp_zdgx (xxmc_school, szd_adress) values('内蒙古大学','内蒙古');
insert into tmp_zdgx (xxmc_school, szd_adress) values('宁夏大学','宁夏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('青海大学','青海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国石油大学','山东');
insert into tmp_zdgx (xxmc_school, szd_adress) values('太原理工大学','山西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西北大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西安电子科技大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('长安大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('陕西师范大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('第四军医大学','陕西');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华东理工大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('东华大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海海洋大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海中医药大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海外国语大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海财经大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海体育学院','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海音乐学院','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('上海大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('第二军医大学','上海');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西南交通大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西南石油大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('成都理工大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('四川农业大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('成都中医药大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西南财经大学','四川');
insert into tmp_zdgx (xxmc_school, szd_adress) values('天津工业大学','天津');
insert into tmp_zdgx (xxmc_school, szd_adress) values('天津医科大学','天津');
insert into tmp_zdgx (xxmc_school, szd_adress) values('天津中医药大学','天津');
insert into tmp_zdgx (xxmc_school, szd_adress) values('华北电力大学','河北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('河北工业大学','河北');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西藏大学','西藏');
insert into tmp_zdgx (xxmc_school, szd_adress) values('石河子大学','新疆');
insert into tmp_zdgx (xxmc_school, szd_adress) values('中国美术学院','浙江');
insert into tmp_zdgx (xxmc_school, szd_adress) values('宁波大学','浙江');
insert into tmp_zdgx (xxmc_school, szd_adress) values('西南大学','重庆');
insert into tmp_zdgx (xxmc_school, szd_adress) values('安徽大学','安徽');
insert into tmp_zdgx (xxmc_school, szd_adress) values('合肥工业大学','安徽');



TRUNCATE table tmp_zdgx ; 
select * from tmp_zdgx;


CREATE TABLE IF NOT EXISTS example_tbl
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);

INSERT into example_tbl values 
(10000,'2017-10-01','北京',20,0,'2017-10-01 06:00:00',20,10,10),
(10000,'2017-10-01','北京',20,0,'2017-10-01 07:00:00',15,2,2),
(10001,'2017-10-01','北京',30,1,'2017-10-01 17:05:45',2,22,22),
(10002,'2017-10-02','上海',20,1,'2017-10-02 12:59:12',200,5,5),
(10003,'2017-10-02','广州',32,0,'2017-10-02 11:20:00',30,11,11),
(10004,'2017-10-01','深圳',35,0,'2017-10-01 10:00:15',100,3,3),
(10004,'2017-10-03','深圳',35,0,'2017-10-03 10:20:22',11,6,6);

TRUNCATE table example_tbl ; 
select * from example_tbl et ;

-- 查询表结构
show CREATE table example_tbl

-- 添加新的列在date之后
```向指定 index 的指定位置添加一列
    语法:
        ADD COLUMN column_name column_type [KEY | agg_type] [DEFAULT "default_value"]
        [AFTER column_name|FIRST]
        [TO rollup_index_name]
        [PROPERTIES ("key"="value", ...)]
    注意:
        1) 聚合模型AGGREGATE如果增加 value 列,需要指定 agg_type
        2) 非聚合模型(如 DUPLICATE KEY)如果增加key列,需要指定KEY关键字
        3) 不能在 rollup index 中增加 base index 中已经存在的列
            如有需要,可以重新创建一个 rollup index)```
            
alter table example_tbl  add column timestamp datetime after date;

-- 修改表结构,将timestamp加入key值,在date后面
ALTER table example_tbl modify column timestamp datetime key after date;

SHOW ALTER table COLUMN;
```
修改指定 index 的列类型以及列位置
    语法:
        MODIFY COLUMN column_name column_type [KEY | agg_type] [NULL | NOT NULL] [DEFAULT "default_value"]
        [AFTER column_name|FIRST]
        [FROM rollup_index_name]
        [PROPERTIES ("key"="value", ...)]
    注意:
        1) 聚合模型如果修改 value 列,需要指定 agg_type
        2) 非聚合类型如果修改key列,需要指定KEY关键字
        3) 只能修改列的类型,列的其他属性维持原样(即其他属性需在语句中按照原属性显式的写出,参见 example 8)
        4) 分区列和分桶列不能做任何修改
        5) 目前支持以下类型的转换(精度损失由用户保证)
            TINYINT/SMALLINT/INT/BIGINT/LARGEINT/FLOAT/DOUBLE 类型向范围更大的数字类型转换
            TINTINT/SMALLINT/INT/BIGINT/LARGEINT/FLOAT/DOUBLE/DECIMAL 转换成 VARCHAR
            VARCHAR 支持修改最大长度
            VARCHAR/CHAR 转换成 TINTINT/SMALLINT/INT/BIGINT/LARGEINT/FLOAT/DOUBLE
            VARCHAR/CHAR 转换成 DATE (目前支持"%Y-%m-%d", "%y-%m-%d", "%Y%m%d", "%y%m%d", "%Y/%m/%d, "%y/%m/%d"六种格式化格式)
            DATETIME 转换成 DATE(仅保留年-月-日信息, 例如: `2019-12-09 21:47:05` <--> `2019-12-09`)
            DATE 转换成 DATETIME(时分秒自动补零, 例如: `2019-12-09` <--> `2019-12-09 00:00:00`)
            FLOAT 转换成 DOUBLE
            INT 转换成 DATE (如果INT类型数据不合法则转换失败,原始数据不变)
        6) 不支持从NULL转为NOT NULL
```

-- 删除列
```
	如果 Schema 中有 REPLACE 方式聚合的 value 列,则不允许删除 Key 列。 
	如果删除 Key 列,Doris 无法决定 REPLACE 列的取值。 
	Unique 数据模型表的所有非 Key 列都是 REPLACE 聚合方式。
```            
alter table example_tbl drop column timestamp; -- 无法删除

TRUNCATE table example_tbl ; 

INSERT into example_tbl values 
(10000,'2017-10-01','2017-10-01 08:00:05','北京',20,0,'2017-10-01 06:00:00',20,10,10),
(10000,'2017-10-01','2017-10-01 09:00:05','北京',20,0,'2017-10-01 07:00:00',15,2,2),
(10001,'2017-10-01','2017-10-01 18:12:10','北京',30,1,'2017-10-01 17:05:45',2,22,22),
(10002,'2017-10-02','2017-10-02 13:10:00','上海',20,1,'2017-10-02 12:59:12',200,5,5),
(10003,'2017-10-02','2017-10-02 13:15:00','广州',32,0,'2017-10-02 11:20:00',30,11,11),
(10004,'2017-10-01','2017-10-01 12:12:48','深圳',35,0,'2017-10-01 10:00:15',100,3,3),
(10004,'2017-10-03','2017-10-03 12:38:20','深圳',35,0,'2017-10-03 10:20:22',11,6,6);

select * from example_tbl et ;

-- Unique模型
CREATE TABLE IF NOT EXISTS example_tb2
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `username` VARCHAR(50) NOT NULL COMMENT "用户昵称",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `phone` LARGEINT COMMENT "用户电话",
    `address` VARCHAR(500) COMMENT "用户地址",
    `register_time` DATETIME COMMENT "用户注册时间"
)
UNIQUE KEY(`user_id`, `username`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
-- "enable_unique_key_merge_on_write" = "true"
);

```
1、在 1.2.0 版本中,作为一个新的feature,写时合并默认关闭,用户可以通过添加下面的property来开启
"enable_unique_key_merge_on_write" = "true"
2、旧的Merge-on-read的实现无法无缝升级到新版本的实现(数据组织方式完全不同),
如果需要改为使用写时合并的实现版本,需要手动执行insert into unique-mow-table select * from source table.
```

select * from example_tb2 et ;


drop table test_tb;

CREATE table test_tb(
	user_id LARGEINT not null comment "用户id",
	date DATE not null comment "数据灌入日期时间",
	cost bigint sum default "0" comment "用户总消费"
)
aggregate key(user_id,date)
distributed by hash(user_id) buckets 1

insert into test_tb values
(10001,'2017-11-20',50),
(10002,'2017-11-21',39)

select * from test_tb;

insert into test_tb values
(10001,'2017-11-20',1),
(10001,'2017-11-21',5),
(10003,'2017-11-22',22)

select min(cost) from test_tb;

select count(*) from test_tb;

select user_id from test_tb;

show tables

-- Range Partition

CREATE TABLE IF NOT EXISTS example_range_tbl
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
ENGINE=OLAP
AGGREGATE KEY(`user_id`, `date`, `timestamp`, `city`, `age`, `sex`)
PARTITION BY RANGE(`date`)
(
    PARTITION `p201701` VALUES LESS THAN ("2017-02-01"),
    PARTITION `p201702` VALUES LESS THAN ("2017-03-01"),
    PARTITION `p201703` VALUES LESS THAN ("2017-04-01")
)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 16
PROPERTIES
(
    "replication_num" = "3",
    "storage_cooldown_time" = "2018-01-01 12:00:00"
);

-- 删除分区
alter table example_range_tbl  drop partition p201704;
-- 删除临时分区
alter table example_range_tbl drop temporary partition p201701;
--删除所有临时分区
alter table example_range_tbl drop temporary partition;


-- 增加临时分区
ALTER table example_range_tbl add TEMPORARY partition p201701 values less than ("2017-02-01");
-- 增加分区
ALTER table example_range_tbl add partition p201704 values less than ("2017-05-01");
-- 查询表结构
show CREATE table example_range_tbl;

show tables

-- 查询除了'user_id'、'sex'之外的表字段
SELECT * except (user_id,sex) FROM example_tbl;

--查看作业进度
SHOW ALTER TABLE COLUMN;
--取消未完成的作业
CANCEL ALTER TABLE COLUMN FROM example_tbl;


```
内存限制
为了防止用户的一个查询可能因为消耗内存过大。查询进行了内存控制,一个查询任务,在单个 BE 节点上默认使用不超过 2GB 内存。
```
-- 显示查询内存限制:
SHOW VARIABLES LIKE "%mem_limit%";
```
exec_mem_limit 的单位是 byte(2G 2147483648),可以通过 SET 命令改变 exec_mem_limit 的值。如改为 8GB。
```
SET exec_mem_limit = 8589934592; 
set exec_mem_limit = 2147483648;

-- 查看当前超时设置:
SHOW VARIABLES LIKE "%query_timeout%";
-- 修改超时设置:时间到1分钟:
SET query_timeout = 60;


-- 上卷rollup
-- 创建rollup
ALTER TABLE example_tbl ADD ROLLUP rollup_city(city,age);
-- 删除rollup
ALTER Table example_tbl drop rollup rollup_city; 

-- 同时在表example_range_tbl的rollup_city添加k4列,rp_stage添加k4列
ALTER TABLE example_range_tbl 
ADD COLUMN k4 INT default "1" to rollup_city,
ADD COLUMN k4 INT default "1" to rp_stage;

-- 查看作业进度 
SHOW ALTER TABLE ROLLUP;
-- 查看example_tbl的 Rollup 信息
desc example_tbl all;

-- 创建一个rollup,比较各个城市的总花费
alter table example_tbl add rollup rp_city(city,cost); 
-- Doris 会自动命中这个 ROLLUP 表,从而只需扫描极少的数据量,即可完成这次聚合查询。
select city,sum(cost) from example_tbl group by city;

-- 创建rollup可以大量缩减查询的数据量,如查询字段存在rollup字段中,会优先查rollup
alter table example_tbl add rollup rp_stage(city,age,cost,max_dwell_time,min_dwell_time);
SELECT city, age, sum(cost), max(max_dwell_time), min(min_dwell_time) FROM example_tbl GROUP BY city, age;
-- 查看example_tbl的 Rollup 信息
desc example_tbl all;

```
ROLLUP 调整前缀索引
因为建表时已经指定了列顺序,所以一个表只有一种前缀索引。通过改变前缀索引的位置,加快查询速度
这对于使用其他不能命中前缀索引的列作为条件进行的查询来说,效率上可能无法满足需求。
因此,我们可以通过创建 ROLLUP 来人为的调整列顺序。
```
SELECT * FROM example_tbl where age=20 and city LIKE "%北%";
```
ROLLUP使用说明
ROLLUP 最根本的作用是提高某些查询的查询效率(无论是通过聚合来减少数据量,还是修改列顺序以匹配前缀索引)。因此 ROLLUP 的含义已经超出了 “上卷” 的范围。这也是为什么我们在源代码中,将其命名为 Materialized Index(物化索引)的原因。
ROLLUP 是附属于 Base 表的,可以看做是 Base 表的一种辅助数据结构。用户可以在 Base 表的基础上,创建或删除 ROLLUP,但是不能在查询中显式的指定查询某 ROLLUP。是否命中 ROLLUP 完全由 Doris 系统自动决定。
ROLLUP 的数据是独立物理存储的。因此,创建的 ROLLUP 越多,占用的磁盘空间也就越大。同时对导入速度也会有影响(导入的ETL阶段会自动产生所有 ROLLUP 的数据),但是不会降低查询效率(只会更好)。
ROLLUP 的数据更新与 Base 表是完全同步的。用户无需关心这个问题。
ROLLUP 中列的聚合方式,与 Base 表完全相同。在创建 ROLLUP 无需指定,也不能修改。
查询能否命中 ROLLUP 的一个必要条件(非充分条件)是,查询所涉及的所有列(包括 select list 和 where 中的查询条件列等)都存在于该 ROLLUP 的列中。否则,查询只能命中 Base 表。
某些类型的查询(如 count(*))在任何条件下,都无法命中 ROLLUP。具体参见接下来的 聚合模型的局限性 一节。
可以通过 EXPLAIN your_sql; 命令获得查询执行计划,在执行计划中,查看是否命中 ROLLUP。
可以通过 DESC tbl_name ALL; 语句显示 Base 表和所有已创建完成的 ROLLUP。
```
-- 查看是否走rollup      TABLE: default_cluster:test.example_tbl(rp_city), PREAGGREGATION: ON
explain select city,sum(cost) from example_tbl group by city;

```
索引
前面的前缀索引中已经介绍过 Doris 的前缀索引,
即 Doris 会把 Base/Rollup 表中的前 36 个字节
(有 varchar 类型则可能导致前缀索引不满 36 个字节,varchar 会截断前缀索引,并且最多使用 varchar 的 20 个字节)
在底层存储引擎单独生成一份排序的稀疏索引数据(数据也是排序的,用索引定位,然后在数据中做二分查找),
然后在查询的时候会根据查询中的条件来匹配每个 Base/Rollup 的前缀索引,并且选择出匹配前缀索引最长的一个 Base/Rollup。

能用的上前缀索引的列上的条件需要是 = < > <= >= in between等
并且这些条件是并列的且关系使用 and 连接,对于or、!= 等这些不能命中
```
-- https://doris.apache.org/zh-CN/docs/dev/data-table/hit-the-rollup#aggregate-%E5%92%8C-unique-%E6%A8%A1%E5%9E%8B%E4%B8%AD%E7%9A%84-rollup

```
动态schema表是一种特殊的表,其schema随着导入自动进行扩展。
目前该功能,主要用于半结构数据,例如JSON等的导入、自动列生成。
因为JSON是类型自描述的,所以我们可以从原始文档中提取schema信息,推断最终类型信息。
这种特殊的表可以减少人工schema change的操作,并轻松导入半结构数据并自动扩展其schema。
```
select * from test.test_tb;

#切换到schema信息库
USE information_schema;
#查询test库,表名和数据量
SELECT TABLE_NAME, TABLE_ROWS FROM TABLES WHERE TABLE_SCHEMA = 'test';
#查询test库里有多少张表
SELECT COUNT(*) FROM TABLES WHERE TABLE_SCHEMA = 'test';

#切换回test库
use test;



导入本地数据:
方式一:Stream Load
cmd中输入命令:
curl -u szjt: -H "label:load_local_file_test" -H "column_separator:," -T "C:\Users\15457\Desktop\zdgx.txt" --http0.9 http://192.168.1.6:8030/api/test/zdgx_313101/_stream_load

curl -u szjt: -H "label:load_local_file_test" -H "column_separator:," -T "C:\Users\15457\Desktop\zdgx.txt" -XPUT --http0.9 http://192.168.1.6:8030/api/test/zdgx_313101/_stream_load

curl -u szjt:09+t,KtBuBAgylV3QDGAvtI=6=~Fa7 -H "label:load_local_file_test" -H "column_separator:," -T "C:\Users\15457\Desktop\zdgx.txt" -XPUT http://192.168.1.6:8030/api/test/zdgx_313101/_stream_load

方式二:官网导入
http://192.168.1.6:8030/

方式三:dataX导入,tomysql


外部表导入数据:
```
创建 Doris 表

这里我们创建一张 Doris 的表,列信息和上一步创建的外部表 ext_oracle_demo 一样:
```
CREATE TABLE `doris_oralce_tbl` (
  `k1` decimal(9, 3) NOT NULL COMMENT "",
  `k2` char(10) NOT NULL COMMENT "",
  `k3` datetime NOT NULL COMMENT "",
  `k5` varchar(20) NOT NULL COMMENT "",
  `k6` double NOT NULL COMMENT ""
)
COMMENT "Doris Table"
DISTRIBUTED BY HASH(k1) BUCKETS 2
PROPERTIES (
    "replication_num" = "1"
);
```
关于创建 Doris 表的详细说明,请参阅 CREATE-TABLE 语法帮助。

导入数据 (从 ext_oracle_demo表 导入到 doris_oralce_tbl 表)
``
INSERT INTO doris_oralce_tbl SELECT k1,k2,k3 FROM ext_oracle_demo limit 100;

INSERT 命令是同步命令,返回成功,即表示导入成功
。
```
使用 Insert 方式同步数据
用户可以通过 MySQL 协议,使用 INSERT 语句进行数据导入。

INSERT 语句的使用方式和 MySQL 等数据库中 INSERT 语句的使用方式类似。 INSERT 语句支持以下两种语法:
```
* INSERT INTO table SELECT ...
* INSERT INTO table VALUES(...)
```
这里我们仅介绍第二种方式。关于 INSERT 命令的详细说明,请参阅 INSERT 命令文档。
```
```
单次写入
单次写入是指用户直接执行一个 INSERT 命令。示例如下:
```
INSERT INTO example_tbl (col1, col2, col3) VALUES (1000, "test", 3.25);
```
对于 Doris 来说,一个 INSERT 命令就是一个完整的导入事务。

因此不论是导入一条数据,还是多条数据,我们都不建议在生产环境使用这种方式进行数据导入。高频次的 INSERT 操作会导致在存储层产生大量的小文件,会严重影响系统性能。

该方式仅用于线下简单测试或低频少量的操作。

或者可以使用以下方式进行批量的插入操作:
```
INSERT INTO example_tbl VALUES
(1000, "baidu1", 3.25)
(2000, "baidu2", 4.25)
(3000, "baidu3", 5.25);
```
我们建议一批次插入条数在尽量大,比如几千甚至一万条一次。或者可以通过下面的程序的方式,使用 PreparedStatement 来进行批量插入。
```

show tables;

select * from c_test;

SHOW CONFIG

CREATE TABLE `c_test01` (
  `id` varchar(600)  NOT NULL COMMENT '主键id',
  `dept_code_permission` varchar(75)   DEFAULT NULL COMMENT '部门code',
  `handler_name_permission` varchar(765)   DEFAULT NULL COMMENT '负责人名称',
  `catalogue_type` varchar(765)   DEFAULT NULL COMMENT '目录类别',
  `catalogue_batch` varchar(765)   DEFAULT NULL COMMENT '目录批次',
  `resource_catalogue_name` varchar(765)  DEFAULT NULL COMMENT '资源目录名称(原名称)',
  `ywgxptbm` varchar(765)   DEFAULT NULL COMMENT '一网共享平台编码',
  `ywgxjhgjmc` varchar(765)   DEFAULT NULL COMMENT '一网共享计划挂接名称',
  `catalogue_work_open_state` varchar(765)   DEFAULT NULL COMMENT '目录工作开展状态',
  `catalogue_work_id` bigint DEFAULT NULL COMMENT '目录工作id',
  `data_item` varchar(16665)   DEFAULT NULL COMMENT '数据项',
  `gj_progress` varchar(765)   DEFAULT NULL COMMENT '挂接进度',
  `claimant_id` varchar(765)   DEFAULT NULL COMMENT '认领人id',
  `claimant_time` datetime  DEFAULT NULL COMMENT '认领时间',
  `claimant_state` tinyint DEFAULT NULL COMMENT '认领状态',
  `flow_id` bigint DEFAULT NULL COMMENT '审核流程id',
  `flow_state` tinyint DEFAULT NULL COMMENT '流程状态 0:草稿 1:审批中 2:通过 3:驳回 4:结束',
  `creater_id` varchar(765)   DEFAULT NULL COMMENT '创建人',
  `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `last_update_id` varchar(765)   DEFAULT NULL COMMENT '最后更新人',
  `last_update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间',
  `del_flag` tinyint DEFAULT '0' COMMENT '逻辑删除 1-是 0-否'
) ENGINE=OLAP
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(id) BUCKETS 2

SELECT * FROM c_test01;

truncate table c_test01;

drop table c_test;

delete from c_test01;


CREATE table jbqk(
id varchar(5) null comment '主键',
name varchar(75) null comment '名字',
tail varchar(10) null comment '身高',
sex varchar(5) null comment '性别',
weight varchar(5) null comment '体重'
)engine=olap
duplicate key(id)
DISTRIBUTED BY HASH(id) BUCKETS 2


-- 查询所有数据库中的表数据量
SELECT TABLE_NAME, TABLE_ROWS 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'test';



select * from c_test01


---创建测试表
CREATE TABLE `dict_area_data` (
  `id` int DEFAULT NULL,
  `code` varchar(50) DEFAULT NULL,
  `cnname` varchar(255) DEFAULT NULL,
  `province` varchar(255) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `area` varchar(255) DEFAULT NULL,
  `parent_code` varchar(10) DEFAULT NULL,
  `status` int DEFAULT NULL,
  `level` int DEFAULT NULL
) ENGINE=olap
duplicate key(id)
DISTRIBUTED BY HASH(id) BUCKETS 2

select * from dict_area_data

select province,count(city) from dict_area_data group by province

select *,count(city) over() from dict_area_data where province="北京市"

2
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区