本文檔我們介紹 Doris 怎么創(chuàng)建表及其他的相關(guān)操作。
連接 Doris
我們在成功部署完成 Doris 之后内边,我們可以通過任意 MySQL 客戶端來連接 Doris 锡移,下面我們的示例是通過 MySQL 客戶端命令行工具來進(jìn)行操作。
注意:
這里連接 Doris 巴刻,指的是連接 Doris FE涵紊,
連接的 IP 地址就是 FE 節(jié)點(diǎn) IP 地址傍妒,端口是 FE 的query_port
默認(rèn)是9030
mysql -u<username> -P<query_port> -h<FE_IP>
創(chuàng)建數(shù)據(jù)庫
這里我們使用 root 用戶登錄,創(chuàng)建一個(gè) test_doris 的數(shù)據(jù)庫
mysql -uroot -P9030 -h127.0.0.1
create database test_doris;
創(chuàng)建成功之后你可以通過 SHOW DATABASES
命令來查看創(chuàng)建好的數(shù)據(jù)庫摸柄,這個(gè)命令會顯示所有已經(jīng)創(chuàng)建的數(shù)據(jù)庫
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| demo |
| information_schema |
| test_doris |
+--------------------+
3 rows in set (0.00 sec)
創(chuàng)建表
我們下面來在新創(chuàng)建的數(shù)據(jù)庫中創(chuàng)建一張表
Doris 提供了多種 數(shù)據(jù)模型颤练,來滿足不同用戶場景的使用,下面我們以 明細(xì)模型 為例創(chuàng)建 Doris 的表驱负,
建表語法及更多參數(shù)請參 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 字節(jié)",
`source` double COMMENT "8 字節(jié)",
`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"
);
注意:
- Doris 對字段名稱是不區(qū)分大小寫的嗦玖,對表名是區(qū)分大小寫的,如果你想忽略大小寫跃脊,請參照 Doris變量配置 中的
lower_case_table_names
說明宇挫。 - DISTRIBUTED BY 這個(gè)是必選項(xiàng),而且分桶字段必須在 key 里定義
建表語句說明
字段類型:Doris 提供了豐富的數(shù)據(jù)類型匾乓,上面例子里我們列出了一部分捞稿,Doris 還支持 BITMAP又谋, HLL拼缝, ARRAY(1.2版本發(fā)布)等,具體可以查看 SQL 手冊 -> 數(shù)據(jù)類型 部分
注意:我們在建表的時(shí)候彰亥,盡可能精準(zhǔn)的選擇數(shù)據(jù)類型咧七,能使用數(shù)字類型的不要使用字符串類型,滿足業(yè)務(wù)需求即可
比如能使 INT 類型的不要是 BIGINT 任斋,能使用 varchar 類型的不要是 String 類型等继阻,這樣更能發(fā)揮數(shù)據(jù)庫的性能,
排序 Key :Doris 內(nèi)部的存儲是按照我們建表時(shí)指定的 Key 進(jìn)行排序的废酷,就是我們在建表時(shí)指定的
DUPLICATE KEY()
,AGGREGATE KEY()
,UNIQUE KEY()
中指定的字段瘟檩,比如上面的建表語句排序 Key 就是我們指定的timestamp
和type
兩列。
注意:我們在建表的排序 Key 必須在表的其他列前面澈蟆,這塊詳細(xì)的內(nèi)容請參考 前綴索引
DISTRIBUTED BY 這里給的字段必須在排序 Key 中定義墨辛,否則創(chuàng)建表的時(shí)候會失敗
分區(qū)分桶
Doris 表支持 創(chuàng)建分區(qū)表,你可以通過 PARTITION 關(guān)鍵字來給表創(chuàng)建分區(qū)趴俘,分區(qū)字段類型支持時(shí)間類型(DATE 睹簇、DATETIME)及 數(shù)字類型奏赘,同時(shí)你可以創(chuàng)建 動態(tài)分區(qū)表,動態(tài)分區(qū)表的字段類型只能是時(shí)間類型太惠,動態(tài)分區(qū)粒度支持小時(shí)磨淌、天、周凿渊、月梁只。
分桶是通過 DISTRIBUTED 關(guān)鍵字類指定,這個(gè)字段必須是在排序 Key 中定義的字段
分區(qū)和分桶的關(guān)系:分區(qū)和分桶你可以理解成一二級索引嗽元,分桶是在分區(qū)下面的二級索引
我們在創(chuàng)建表的時(shí)候選擇合適的分區(qū)及分桶策略對我們的查詢分析性能提升非常大的幫助敛纲,有關(guān)如何選擇分區(qū)分桶可以參照 數(shù)據(jù)劃分。數(shù)據(jù)模型
DUPLICATE 關(guān)鍵字指定了這個(gè)表的數(shù)據(jù)模型是明細(xì)模型剂癌, Key 后面給的列表示當(dāng)前表的排序 Key淤翔,Doris 支持一下三種數(shù)據(jù)模型
你可以根據(jù)三種數(shù)據(jù)模型的特點(diǎn)結(jié)合自己業(yè)務(wù)的情況進(jìn)行選擇使用。
- 數(shù)據(jù)索引
Doris 默認(rèn)會給我們在建表的時(shí)候指定的排序 Key 創(chuàng)建稀疏索引來加速數(shù)據(jù)查詢佩谷,同時(shí) Doris 支持 BITMAP索引 旁壮,BloomFilter索引 ,同時(shí) Doris 內(nèi)部也之內(nèi)一些智能索引谐檀。 - ENGINE 類型
Doris 支持多用 ENGINE 類型抡谐,默認(rèn)是 OLAP(Doris內(nèi)部表),同時(shí)我們還支持odbc
桐猬、hudi
麦撵、hive
、iceberg
溃肪、elasticsearch
等免胃,這些都是表示創(chuàng)建的是對應(yīng)的外部表,具體這塊我們可以去查看 生態(tài)擴(kuò)展 -> 擴(kuò)展表 部分的內(nèi)容惫撰。
查看表信息
我們執(zhí)行完建表語句羔沙,表創(chuàng)建成功之后,我們可以通過下面的命令來查看表的相關(guān)信息
查看當(dāng)前數(shù)據(jù)庫下的所有表信息
SHOW TABLES
mysql> show tables;
+----------------------+
| Tables_in_test_doris |
+----------------------+
| expamle_tbl |
+----------------------+
1 row in set (0.00 sec)
查看表結(jié)構(gòu)
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;
修改表結(jié)構(gòu)
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)
刪除一列
我們來刪除上面新增的那一列數(shù)據(jù)
ALTER TABLE expamle_tbl DROP COLUMN TEST_ADD_COL;
查看 Schema Chanage 作業(yè)狀態(tài)
我們可以通過 SHOW ALTER TABLE COLUMN\G;
來看到表結(jié)構(gòu)變更作業(yè)的狀態(tài)信息诱建。
State 是 FINISHED 表示作業(yè)完成蝴蜓,新的表結(jié)構(gòu)已經(jīng)生效。
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)
這個(gè)時(shí)候就可以通過 DESC TABLE_NAME
來查看變更后的表結(jié)構(gòu)了
取消 Schema Chanage 作業(yè)
如果作業(yè)長時(shí)間沒有完成涂佃,或者影響到了其他操作励翼,你可以通過下面的命令來取消作業(yè)蜈敢。
具體更多使用請參照 CANCEL ALTER TABLE 。
CANEL ALTER TABLE COLUMN FROM expamle_tbl