Apache Doris 系列: 入門篇-創(chuàng)建數(shù)據(jù)表

本文檔我們介紹 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"
); 

注意:

  1. Doris 對字段名稱是不區(qū)分大小寫的嗦玖,對表名是區(qū)分大小寫的,如果你想忽略大小寫跃脊,請參照 Doris變量配置 中的 lower_case_table_names 說明宇挫。
  2. DISTRIBUTED BY 這個(gè)是必選項(xiàng),而且分桶字段必須在 key 里定義

建表語句說明

  1. 字段類型:Doris 提供了豐富的數(shù)據(jù)類型匾乓,上面例子里我們列出了一部分捞稿,Doris 還支持 BITMAP又谋, HLL拼缝, ARRAY(1.2版本發(fā)布)等,具體可以查看 SQL 手冊 -> 數(shù)據(jù)類型 部分
    注意:

  2. 我們在建表的時(shí)候彰亥,盡可能精準(zhǔn)的選擇數(shù)據(jù)類型咧七,能使用數(shù)字類型的不要使用字符串類型,滿足業(yè)務(wù)需求即可

  3. 比如能使 INT 類型的不要是 BIGINT 任斋,能使用 varchar 類型的不要是 String 類型等继阻,這樣更能發(fā)揮數(shù)據(jù)庫的性能,

  4. 排序 Key :Doris 內(nèi)部的存儲是按照我們建表時(shí)指定的 Key 進(jìn)行排序的废酷,就是我們在建表時(shí)指定的 DUPLICATE KEY() ,AGGREGATE KEY(),UNIQUE KEY() 中指定的字段瘟檩,比如上面的建表語句排序 Key 就是我們指定的 timestamptype 兩列。
    注意:

  5. 我們在建表的排序 Key 必須在表的其他列前面澈蟆,這塊詳細(xì)的內(nèi)容請參考 前綴索引

  6. DISTRIBUTED BY 這里給的字段必須在排序 Key 中定義墨辛,否則創(chuàng)建表的時(shí)候會失敗

  7. 分區(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ù)劃分

  8. 數(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)行選擇使用。

  1. 數(shù)據(jù)索引
    Doris 默認(rèn)會給我們在建表的時(shí)候指定的排序 Key 創(chuàng)建稀疏索引來加速數(shù)據(jù)查詢佩谷,同時(shí) Doris 支持 BITMAP索引 旁壮,BloomFilter索引 ,同時(shí) Doris 內(nèi)部也之內(nèi)一些智能索引谐檀。
  2. ENGINE 類型
    Doris 支持多用 ENGINE 類型抡谐,默認(rèn)是 OLAP(Doris內(nèi)部表),同時(shí)我們還支持 odbc桐猬、 hudi麦撵、 hiveiceberg溃肪、 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汽抚,一起剝皮案震驚了整個(gè)濱河市抓狭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌造烁,老刑警劉巖否过,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惭蟋,居然都是意外死亡苗桂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門告组,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煤伟,“玉大人,你說我怎么就攤上這事木缝”阆牵” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵我碟,是天一觀的道長放案。 經(jīng)常有香客問我,道長矫俺,這世上最難降的妖魔是什么吱殉? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮厘托,結(jié)果婚禮上友雳,老公的妹妹穿的比我還像新娘。我一直安慰自己催烘,他們只是感情好沥阱,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布缎罢。 她就那樣靜靜地躺著伊群,像睡著了一般。 火紅的嫁衣襯著肌膚如雪策精。 梳的紋絲不亂的頭發(fā)上舰始,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音咽袜,去河邊找鬼丸卷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛询刹,可吹牛的內(nèi)容都是我干的谜嫉。 我是一名探鬼主播萎坷,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沐兰!你這毒婦竟也來了哆档?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤住闯,失蹤者是張志新(化名)和其女友劉穎瓜浸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體比原,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡插佛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了量窘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雇寇。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚌铜,靈堂內(nèi)的尸體忽然破棺而出谢床,到底是詐尸還是另有隱情,我是刑警寧澤厘线,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布识腿,位于F島的核電站,受9級特大地震影響造壮,放射性物質(zhì)發(fā)生泄漏渡讼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一耳璧、第九天 我趴在偏房一處隱蔽的房頂上張望成箫。 院中可真熱鬧,春花似錦旨枯、人聲如沸蹬昌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皂贩。三九已至,卻和暖如春昆汹,著一層夾襖步出監(jiān)牢的瞬間明刷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工满粗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辈末,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像挤聘,于是被迫代替她去往敵國和親轰枝。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容