doris建表语法笔记,v1.2.2,from官方文档

文章详细介绍了如何使用SQL创建数据库表,包括如果不存在则创建的条件,定义列类型、约束、索引,以及表引擎的选择,如OLAP。还讨论了不同类型的分区策略,如范围分区、哈希分桶和数据排序。此外,提到了数据存储选项,如压缩和副本数的设置。

[]表示可选
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"]
        )

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值