大数据分析——Apache Doris(十八)

157 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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中