[]表示可选
CREATE TABLE [如果不存在则创建] [数据库.]表名
CREATE TABLE IF NOT EXISTS test.user_info
(
列名 列类型 [KEY] [聚合类型] [NULL] [默认值] [注释],
total_fee DECIMAL(10,2) SUM NOT NULL DEFAULT "0.00" COMMENT "总费用",
……,
INDEX 索引名(列名) [USING BITMAP] COMMENT '注释',
INDEX i_uid(user_id) USING BITMAP COMMENT "用户表id索引",
……
)
[表引擎类型] --默认OLAP,外部表可选:MYSQL、BROKER、HIVE、ICEBERG 、HUDI
ENGINE=olap
[数据模型] --3种模型
1.DUPLICATE KEY(列1[, 列2, ...]) --指定列为排序列,建议前2~4列
2.AGGREGATE KEY(列1[, 列2, ...]) --指定列为维度列
3.UNIQUE KEY(列1[, 列, ...]) --指定列为主键列
--列顺序很重要,最好按建表的列顺序设置
[表注释]
COMMENT "用户表"
[分区信息] --3种写法
1.less than:仅定义分区上界。下界由上一个分区的上界决定。
PARTITION BY RANGE (create_date)(
PARTITION p1 VALUES LESS THAN ("2014-01-01"),
PARTITION p2 VALUES LESS THAN ("2015-01-01")
)
2.fixed range: 定义分区的左闭右开区间,左右区间完全由用户自己确定。
PARTITION BY RANGE (k1, k2, k3)(
PARTITION p1 VALUES [("2014-01-01", "10", "200"), ("2014-01-01", "20", "300")),
PARTITION p2 VALUES [("2014-06-01", "100", "200"), ("2014-07-01", "100", "300"))
)
3.multi range(自v1.2新加),批量创建RANGE分区,设定时间单位和步长,支持年/月/日/周/小时。
PARTITION BY RANGE(create_date)(
FROM ("2000-11-14") TO ("2021-11-14") INTERVAL 1 YEAR,
FROM ("2021-11-14") TO ("2022-11-14") INTERVAL 1 MONTH,
FROM ("2022-11-14") TO ("2023-01-03") INTERVAL 1 WEEK,
FROM ("2023-01-03") TO ("2023-01-14") INTERVAL 1 DAY
)
数据分桶 --2种分桶方式
1.哈希分桶
DISTRIBUTED BY HASH (列1[, 列2, ...]) [BUCKETS 数目]
DISTRIBUTED BY HASH(`user_id`) BUCKETS 8
2.随机分桶
DISTRIBUTED BY RANDOM [BUCKETS 数目]
DISTRIBUTED BY RANDOM BUCKETS 8
[物化视图,rollup表]
rollup 表名(列1[, 列2, ...])
[FROM from_index_name]
[PROPERTIES ("key"="value", ...)],...)
-- 这个语法没懂
rollup r_userinfo(user_name,fee)
[设置表属性]
PROPERTIES("属性名" = "属性值"[,……]);
1.副本数,默认为3,必须<=BE节点数。
"replication_num" = "3","replication_allocation" = "tag.location.default:3"
2.数据存储介质
"storage_medium" = "SSD", -- SSD或HDD
"storage_cooldown_time" = "2020-11-20 00:00:00" --到期时间,默认存放 30 天。
--数据存放在 SSD 中,并且在 2020-11-20 00:00:00 到期后,会自动迁移到 HDD 存储上
3.设置分组
"colocate_with" = "组名称"
-- 查询设置Colocation Join会用到
4.设置Bloom Filter 索引
"bloom_filter_columns" = "k1, k2, k3"
-- k1, k2, k3列索引之间是独立的,不是组合索引
5.设置数据块缓存
"in_memory" = "true"
--减少磁盘IO。但这个属性不会保证数据块常驻在内存中,仅作为一种尽力而为的标识
6.数据压缩
"compression"="zstd" --指定压缩方式,默认LZ4,自v1.1可指定为ZSTD提供压缩比
"disable_auto_compaction"="false"--设为true,自动压缩进程会跳过这个表的所有tablet
7.Unique模型指定sequence列
"function_column.sequence_col" = 'column_name' --仅整型和时间类型(DATE,DATETIME)
"function_column.sequence_type" = 'Date' --仅整型和时间类型(DATE,DATETIME)
--设置sequence_col会覆盖sequence_type
--当KEY列相同时,将按照 Sequence列进行 REPLACE(较大值替换较小值,否则无法替换)
8.优化加减操作(自v1.2新加,v1.2.1后默认true)
"light_schema_change" = 'true'
9.动态分区
dynamic_partition.enable: 指定表级别的动态分区功能是否开启。默认为 true。
dynamic_partition.time_unit: 指定动态添加分区的时间单位,可选择为DAY/WEEK/MONTH/HOUR
dynamic_partition.start: 指定向前删除多少个分区。值必须<0。默认为 Integer.MIN_VALUE。
dynamic_partition.end: 指定提前创建的分区数量。值必须大于0。
dynamic_partition.prefix: 指定创建的分区名前缀,例如前缀为p,则自动创建分区名为p20200108。
dynamic_partition.buckets: 用于指定自动创建的分区分桶数量。
dynamic_partition.create_history_partition: 是否创建历史分区。
dynamic_partition.history_partition_num: 指定创建历史分区的数量。
dynamic_partition.reserved_history_periods: 用于指定保留的历史分区的时间段。
10.数据排序
data_sort.sort_type: 数据排序使用的方法,目前支持两种:lexical/z-order,默认是lexical
data_sort.col_num: 数据排序使用的列数,取最前面几列,不能超过总的key 列数
[创建外部表需要的属性]
1.mysql
PROPERTIES (
"host" = "主机IP",
"port" = "端口",
"user" = "用户名",
"password" = "密码",
"database" = "数据库名称",
"table" = "表名"[,"charset" = "utf8"/"utf8mb4"]
)
doris建表语法笔记,v1.2.2,from官方文档
于 2023-03-27 14:34:37 首次发布
文章详细介绍了如何使用SQL创建数据库表,包括如果不存在则创建的条件,定义列类型、约束、索引,以及表引擎的选择,如OLAP。还讨论了不同类型的分区策略,如范围分区、哈希分桶和数据排序。此外,提到了数据存储选项,如压缩和副本数的设置。
2万+

被折叠的 条评论
为什么被折叠?



