基础使用指南
- 创建数据库:
create databases example_db;
- 赋权:
grant all on example_db to test;
在复合分区中:
- 第一层称为Partition,即分区,用户可以指定某一维度列作为分区列(当前只支持整形和时间类型的列),并指定每个分区的取值范围.
- 第二层称为Distribution,即分桶,用户可以指定一个或多个维度列和桶数对数据进行Hash分布.
单分区
建立一个名字为table1的逻辑表,分桶列为siteid,桶数为10.
这个表的schema如下:
- siteid:类型为int,默认值是10;
- citycode:类型是smallint
- username:类型是varchar,最大长度为32,默认值为空字符串
- pv:类型是bigint,默认值是0;这是一个指标列,Doris内部会对指标列做聚合操作,这个列的聚合方法是求和(SUM)
建表语句如下:
CREATE TABLE table1
(
siteid INT DEFAULT '10',
citycode SMALLINT,
username VARCHAR DEFAULT '',
pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(siteid, citycode, username)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1")
复合分区
建立一个名字为table2的逻辑表.
这个表的schema如下:
- event_day:类型是date,无默认值
- siteid:类型是int,默认值是10
- citycode:类型是smallint
- username:类型是varchar,最大长度为32,默认值为空字符串
- pv:类型是bigint,默认值是0;这是一个指标列,Doris内部会对指标列做聚合操作,这个列的聚合方法是求和(SUM)
使用event_day列作为分区列,建立3个分区:p201706,p201707,p201708
- p201706:范围为 [最小值, 2017-07-01)
- p201707:范围为 [2017-07-01, 2017-08-01)
- p201708:范围为 [2017-08-01, 2017-09-01)
每个分区使用siteid进行Hash分桶,桶数为10
建表语句如下:
CREATE TABLE table2
(
event_day DATE,
siteid INT DEFAULT '10',
citycode SMALLINT,
username VARCHAR DEFAULT '',
pv BIGINT SUM DEFAULT '0'
)
AGGREGATE KEY(event_day, siteid, citycode, username)
PARTITION BY RANGE(event_day)
(
PARTITION p201706 VALUES less than ('2017-07-01'),
PARTITION p201707 VALUES LESS THAN ('2017-08-01'),
PARTITION p201708 VALUES LESS THAN ('2017-09-01')
)
DISTRIBUTED BY HASH(siteid) BUCKETS 10
PROPERTIES("replication_num" = "1")
注意事项:
- 上述表通过设置replication_num建的都是单副本表,Doris建议用户采用默认的3副本设置,以保证高可用.
- 可以对Table增加上卷表(Rollup)以提高查询性能,这部分可以参见高级使用指南关于Rollup的描述.
- 表的列Null属性默认为true,会对查询性能有一定影响.
- 可以动态修改表的schema.
- 数据导入可以导入指定的Partition.
- 可以对复合分区表动态的增删分区.
导入数据
流式导入
流式导入通过HTTP协议向Doris传输数据,可以不依赖其他系统或组件直接导入本地数据.
注意事项:
- 采用流式导入建议文件大小限制在10GB以内,过大的文件会导致失败重试代价变大.
- 每一批导入数据都需要一个Label,Label最好是一个和一批数据有关的字符串,方便阅读和管理.Doris给予Label保证在一个Database内,同一批数据只可导入成功一次.失败任务的Label可以重用.
- 流式导入是同步命令.命令返回成功则表示数据已经导入,返回失败表示这批数据没有导入.
Broker导入
Broker导入通过部署的Broker进程,读取外部存储上的数据进行导入.
Broker导入是异步命令,导入是否成功需要通过show load
查看,返回结果中,State
字段为FINISHED则表示导入成功.异步的导入任务在结束前可以取消:CANCEL LOAD WHERE LABEL = ""