本文档我们介绍 Doris 怎么创建表及其他的相关操作。
我们在成功部署完成 Doris 之后,我们可以通过任意 MySQL 客户端来连接 Doris ,下面我们的示例是通过 MySQL 客户端命令行工具来进行操作。
注意:
这里连接 Doris ,指的是连接 Doris FE,
连接的 IP 地址就是 FE 节点 IP 地址,端口是 FE 的query_port
默认是9030
mysql -u -P -h
这里我们使用 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"
);
注意:
lower_case_table_names
说明。DUPLICATE KEY()
,AGGREGATE KEY()
,UNIQUE KEY()
中指定的字段,比如上面的建表语句排序 Key 就是我们指定的 timestamp
和type
两列。你可以根据三种数据模型的特点结合自己业务的情况进行选择使用。
odbc
、 hudi
、 hive
、 iceberg
、 elasticsearch
等,这些都是表示创建的是对应的外部表,具体这块我们可以去查看 生态扩展 -> 扩展表 部分的内容。我们执行完建表语句,表创建成功之后,我们可以通过下面的命令来查看表的相关信息
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;
我们可以通过 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
来查看变更后的表结构了
如果作业长时间没有完成,或者影响到了其他操作,你可以通过下面的命令来取消作业。
具体更多使用请参照 CANCEL ALTER TABLE 。
CANEL ALTER TABLE COLUMN FROM expamle_tbl