Apache Doris 系列: 入门篇-创建数据表

本文档我们介绍 Doris 怎么创建表及其他的相关操作。

连接 Doris

我们在成功部署完成 Doris 之后,我们可以通过任意 MySQL 客户端来连接 Doris ,下面我们的示例是通过 MySQL 客户端命令行工具来进行操作。

注意:
这里连接 Doris ,指的是连接 Doris FE,
连接的 IP 地址就是 FE 节点 IP 地址,端口是 FE 的 query_port 默认是9030

 mysql -u<username> -P<query_port> -h<FE_IP>

创建数据库

这里我们使用 root 用户登录,创建一个 test_doris 的数据库

mysql -uroot -P9030 -h127.0.0.1

create database test_doris;

创建成功之后你可以通过 SHOW DATABASES 命令来查看创建好的数据库,这个命令会显示所有已经创建的数据库

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| demo               |
| information_schema |
| test_doris         |
+--------------------+
3 rows in set (0.00 sec)

创建表

我们下面来在新创建的数据库中创建一张表

Doris 提供了多种 数据模型,来满足不同用户场景的使用,下面我们以 明细模型 为例创建 Doris 的表,

建表语法及更多参数请参 SQL手册 CREATE TABLE

CREATE TABLE IF NOT EXISTS test_doris.example_tbl
(
    `timestamp` DATE NOT NULL COMMENT "['0000-01-01', '9999-12-31']",
    `type` TINYINT NOT NULL COMMENT "[-128, 127]",
    `error_code` INT COMMENT "[-2147483648, 2147483647]",
    `error_msg` VARCHAR(300) COMMENT "[1-65533]",
    `op_id` BIGINT COMMENT "[-9223372036854775808, 9223372036854775807]",
    `op_time` DATETIME COMMENT "['0000-01-01 00:00:00', '9999-12-31 23:59:59']",
    `target` float COMMENT "4 字节",
    `source` double COMMENT "8 字节",
    `lost_cost` decimal(12,2) COMMENT "",
    `remark` string COMMENT "1m size",
    `op_userid` LARGEINT COMMENT "[-2^127 + 1 ~ 2^127 - 1]",
    `plate` SMALLINT COMMENT "[-32768, 32767]",
    `iscompleted` boolean COMMENT "true 或者 false"
)
DUPLICATE KEY(`timestamp`, `type`)
DISTRIBUTED BY HASH(`type`) BUCKETS 1
PROPERTIES (
    "replication_allocation" = "tag.location.default: 1"
); 

注意:

  1. Doris 对字段名称是不区分大小写的,对表名是区分大小写的,如果你想忽略大小写,请参照 Doris变量配置 中的 lower_case_table_names 说明。
  2. DISTRIBUTED BY 这个是必选项,而且分桶字段必须在 key 里定义

建表语句说明

  1. 字段类型:Doris 提供了丰富的数据类型,上面例子里我们列出了一部分,Doris 还支持 BITMAPHLLARRAY(1.2版本发布)等,具体可以查看 SQL 手册 -> 数据类型 部分
    注意:

  2. 我们在建表的时候,尽可能精准的选择数据类型,能使用数字类型的不要使用字符串类型,满足业务需求即可

  3. 比如能使 INT 类型的不要是 BIGINT ,能使用 varchar 类型的不要是 String 类型等,这样更能发挥数据库的性能,

  4. 排序 Key :Doris 内部的存储是按照我们建表时指定的 Key 进行排序的,就是我们在建表时指定的 DUPLICATE KEY() ,AGGREGATE KEY(),UNIQUE KEY() 中指定的字段,比如上面的建表语句排序 Key 就是我们指定的 timestamptype 两列。
    注意:

  5. 我们在建表的排序 Key 必须在表的其他列前面,这块详细的内容请参考 前缀索引

  6. DISTRIBUTED BY 这里给的字段必须在排序 Key 中定义,否则创建表的时候会失败

  7. 分区分桶
    Doris 表支持 创建分区表,你可以通过 PARTITION 关键字来给表创建分区,分区字段类型支持时间类型(DATE 、DATETIME)及 数字类型,同时你可以创建 动态分区表,动态分区表的字段类型只能是时间类型,动态分区粒度支持小时、天、周、月。
    分桶是通过 DISTRIBUTED 关键字类指定,这个字段必须是在排序 Key 中定义的字段
    分区和分桶的关系:分区和分桶你可以理解成一二级索引,分桶是在分区下面的二级索引
    我们在创建表的时候选择合适的分区及分桶策略对我们的查询分析性能提升非常大的帮助,有关如何选择分区分桶可以参照 数据划分

  8. 数据模型
    DUPLICATE 关键字指定了这个表的数据模型是明细模型, Key 后面给的列表示当前表的排序 Key,Doris 支持一下三种数据模型

你可以根据三种数据模型的特点结合自己业务的情况进行选择使用。

  1. 数据索引
    Doris 默认会给我们在建表的时候指定的排序 Key 创建稀疏索引来加速数据查询,同时 Doris 支持 BITMAP索引BloomFilter索引 ,同时 Doris 内部也之内一些智能索引。
  2. ENGINE 类型
    Doris 支持多用 ENGINE 类型,默认是 OLAP(Doris内部表),同时我们还支持 odbchudihiveicebergelasticsearch 等,这些都是表示创建的是对应的外部表,具体这块我们可以去查看 生态扩展 -> 扩展表 部分的内容。

查看表信息

我们执行完建表语句,表创建成功之后,我们可以通过下面的命令来查看表的相关信息

查看当前数据库下的所有表信息

SHOW TABLES

mysql> show tables;
+----------------------+
| Tables_in_test_doris |
+----------------------+
| expamle_tbl          |
+----------------------+
1 row in set (0.00 sec)

查看表结构

DESC table_name [ALL]

mysql> desc expamle_tbl all;
+-------------+---------------+-------------+---------------+------+-------+---------+-------+---------+
| IndexName   | IndexKeysType | Field       | Type          | Null | Key   | Default | Extra | Visible |
+-------------+---------------+-------------+---------------+------+-------+---------+-------+---------+
| expamle_tbl | DUP_KEYS      | timestamp   | DATETIME      | No   | true  | NULL    |       | true    |
|             |               | type        | TINYINT       | No   | true  | NULL    |       | true    |
|             |               | error_code  | INT           | Yes  | false | NULL    | NONE  | true    |
|             |               | error_msg   | VARCHAR(300)  | Yes  | false | NULL    | NONE  | true    |
|             |               | op_id       | BIGINT        | Yes  | false | NULL    | NONE  | true    |
|             |               | op_time     | DATE          | Yes  | false | NULL    | NONE  | true    |
|             |               | target      | FLOAT         | Yes  | false | NULL    | NONE  | true    |
|             |               | source      | DOUBLE        | Yes  | false | NULL    | NONE  | true    |
|             |               | lost_cost   | DECIMAL(12,2) | Yes  | false | NULL    | NONE  | true    |
|             |               | remark      | TEXT          | Yes  | false | NULL    | NONE  | true    |
|             |               | op_userid   | LARGEINT      | Yes  | false | NULL    | NONE  | true    |
|             |               | iscompleted | BOOLEAN       | Yes  | false | NULL    | NONE  | true    |
+-------------+---------------+-------------+---------------+------+-------+---------+-------+---------+
12 rows in set (0.01 sec)

查看建表语句

SHOW CREATE TABLE TABLE_NAME

show create table expamle_tbl;

修改表结构

Doris 支持多种 DDL 操作,你可以通过 ALTER TABLE 命令来修改表的 Schema ,包括增加列,修改列类型、删除列、改变列的顺序。

注意:
目前 Doris 不支持修改列名

增加一列

ALTER TABLE expamle_tbl ADD COLUMN TEST_ADD_COL INT DEFAULT '0' AFTER iscompleted;

添加成功之后我们通过 desc 命令可以看到我们新加的列

mysql> desc expamle_tbl;
+--------------+---------------+------+-------+---------+-------+
| Field        | Type          | Null | Key   | Default | Extra |
+--------------+---------------+------+-------+---------+-------+
| timestamp    | DATETIME      | No   | true  | NULL    |       |
| type         | TINYINT       | No   | true  | NULL    |       |
| error_code   | INT           | Yes  | false | NULL    | NONE  |
| error_msg    | VARCHAR(300)  | Yes  | false | NULL    | NONE  |
| op_id        | BIGINT        | Yes  | false | NULL    | NONE  |
| op_time      | DATE          | Yes  | false | NULL    | NONE  |
| target       | FLOAT         | Yes  | false | NULL    | NONE  |
| source       | DOUBLE        | Yes  | false | NULL    | NONE  |
| lost_cost    | DECIMAL(12,2) | Yes  | false | NULL    | NONE  |
| remark       | TEXT          | Yes  | false | NULL    | NONE  |
| op_userid    | LARGEINT      | Yes  | false | NULL    | NONE  |
| iscompleted  | BOOLEAN       | Yes  | false | NULL    | NONE  |
| TEST_ADD_COL | INT           | Yes  | false | 0       | NONE  |
+--------------+---------------+------+-------+---------+-------+
13 rows in set (0.01 sec)

删除一列

我们来删除上面新增的那一列数据

ALTER TABLE expamle_tbl DROP COLUMN TEST_ADD_COL;

查看 Schema Chanage 作业状态

我们可以通过 SHOW ALTER TABLE COLUMN\G; 来看到表结构变更作业的状态信息。

State 是 FINISHED 表示作业完成,新的表结构已经生效。

mysql> SHOW ALTER TABLE COLUMN\G;
*************************** 1\. row ***************************
        JobId: 12015
    TableName: expamle_tbl
   CreateTime: 2022-08-18 14:54:26
   FinishTime: 2022-08-18 14:54:27
    IndexName: expamle_tbl
      IndexId: 12016
OriginIndexId: 12012
SchemaVersion: 1:1978370804
TransactionId: 2003
        State: FINISHED
          Msg:
     Progress: NULL
      Timeout: 86400
1 row in set (0.01 sec)

这个时候就可以通过 DESC TABLE_NAME 来查看变更后的表结构了

取消 Schema Chanage 作业

如果作业长时间没有完成,或者影响到了其他操作,你可以通过下面的命令来取消作业。

具体更多使用请参照 CANCEL ALTER TABLE

CANEL ALTER TABLE COLUMN FROM expamle_tbl
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容