一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情。
复合分区
建立一个名字为 table2 的逻辑表。
这个表的 schema 如下:
- event_day:类型是DATE,无默认值
-siteid:类型是INT(4字节), 默认值为10
-
citycode:类型是SMALLINT(2字节)
-
username:类型是VARCHAR, 最大长度为32, 默认值为空字符串
-
pv:类型是BIGINT(8字节), 默认值是0; 这是一个指标列, Doris 内部会对指标列做聚合操作, 这个列的聚合方法是求和(SUM)
我们使用 event_day 列作为分区列,建立3个分区: p202006, p202007, p202008
-
p202006:范围为 [最小值, 2020-07-01)
-
p202007:范围为 [2020-07-01, 2020-08-01)
-
p202008:范围为 [2020-08-01, 2020-09-01)
注意区间为左闭右开。
每个分区使用 siteid 进行哈希分桶,桶数为10
建表语句如下:
CREATE TABLE table2
(
event_day DATE,
siteid INT DEFAULT '10',
citycode SMALLINT,
username VARCHAR(32) DEFAULT '',
pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(event_day, siteid, citycode, username)
PARTITION BY RANGE(event_day)
(
PARTITION p202006 VALUES LESS THAN ('2020-07-01'),
PARTITION p202007 VALUES LESS THAN ('2020-08-01'),
PARTITION p202008 VALUES LESS THAN ('2020-09-01')
)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1");
注意事项:
-
上述表通过设置 replication_num 建的都是单副本的表,Doris建议用户采用默认的 3 副本设置,以保证高可用。
-
可以对复合分区表动态的增删分区。详见 HELP ALTER TABLE 中 Partition 相关部分。
-
数据导入可以导入指定的 Partition。详见 HELP LOAD。
-
可以动态修改表的 Schema。
-
可以对 Table 增加上卷表(Rollup)以提高查询性能,这部分可以参见高级使用指南关于 Rollup 的描述。
表的列的Null属性默认为true,会对查询性能有一定的影响。
数据导入 (Load)
为适配不同的数据导入需求,Doris系统提供了五种不同的数据导入方式,每种数据导入方式支持不同的数据源,存在不同的方式(异步,同步)
- Broker load
通过Broker进程访问并读取外部数据源(HDFS)导入Doris,用户通过Mysql提交导入作业,异步执行,通过show load命令查看导入结果
- Stream load
用户通过HTTP协议提交请求并携带原始数据创建导入,主要用于快速将本地文件或者数据流中的数据导入到Doris,导入命令同步返回结果
- Insert
类似Mysql中的insert语句,Doris提供insert into table select ...的方式从Doris的表中读取数据并导入到另一张表中,或者通过insert into table values(...)的方式插入单条数据
- Multi load
用户可以通过HTTP协议提交多个导入作业,Multi load可以保证多个导入作业的原子生效
- Routine load
用户通过Mysql协议提交例行导入作业,生成一个常驻线程,不间断的从数据源(如Kafka)中读取数据并导入到Doris中