doirs與傳統的關係庫相同,都是以表(table)的形式儲存資料,其中一張表包括行row和列column。
column分為兩類:key和value,從業務角度看,key和value可以分別對應維度和指標列。
doris主要包括三種資料模型:aggregate、uniq和duplicate,也是這篇文章主要介紹的。
假設業務有如下資料表
columnname
type
aggregationtype
comment
user_id
largeint
使用者id
date
date
資料灌入日期
city
varchar(20)
使用者所在城市
agesmallint
使用者年齡
***tinyint
使用者性別
last_visit_date
datetime
replace
使用者最後一次訪問時間
cost
bigint
sum使用者總消費
max_dwell_time
intmax
使用者最大停留時間
min_dwell_time
intmin
使用者最小停留時間
表中的列沒有設定aggregation type的列稱為key,而設定了aggregation type的稱為value。
目前共有四種aggregation type聚合型別,如下所示:
1 sum:求和,多行value累加
2 replace:替代,後插入的value替代之前的value
3 max:保留value最大值
4 min:保留value最小值
原理:實際匯入資料中相當於會根據key進行group by,然後value值輸出相應aggregation type的結果。與使用聚合函式後的sql相同,明細資料會丟失,只保留聚合後的結果。如果想要保留明細資料,可以加入key欄位timestamp從而保證每一行的key都不相同。
在某些多維分析場景下,使用者更關注的是如何保證 key 的唯一性,即如何獲得 primary key 唯一性約束。因此doris引入了 uniq 的資料模型。該模型本質上是聚合模型的乙個特例,也是一種簡化的表結構表示方式。
假設業務有如下資料表
columnname
type
iskey
comment
user_id
bigint
yes使用者id
username
varchar(50)
yes使用者暱稱
city
varchar(20)
no使用者所在城市
agesmallint
no使用者年齡
***tinyint
no使用者性別
phone
largeint
no使用者**
address
varchar(500)
no使用者住址
register_time
datetime
no使用者註冊時間
而這個表結構,完全同等於以下使用聚合模型描述的表結構:
columnname
type
aggregationtype
comment
user_id
bigint
使用者id
username
varchar(50)
使用者暱稱
city
varchar(20)
replace
使用者所在城市
agesmallint
replace
使用者年齡
***tinyint
replace
使用者性別
phone
largeint
replace
使用者**
address
varchar(500)
replace
使用者住址
register_time
datetime
replace
使用者註冊時間
在某些多維分析場景下,資料既沒有主鍵,也沒有聚合需求。例如常見的日誌表log。
假設業務有如下資料表
columnname
type
sortkey
comment
timestamp
datetime
yes日誌時間
type
intyes
日誌型別
error_code
intyes
錯誤碼error_msg
varchar(1024)
no錯誤詳細資訊
op_id
bigint
no負責人id
op_time
datetime
no處理時間
建表語句如下:
create table if not exists example_db.expamle_tbl
( `timestamp` datetime not null comment "日誌時間",
`type` int not null comment "日誌型別",
`error_code` int comment "錯誤碼",
`error_msg` varchar(1024) comment "錯誤詳細資訊",
`op_id` bigint comment "負責人id",
`op_time` datetime comment "處理時間"
)duplicate key(`timestamp`, `type`)
... /* 省略 partition 和 distribution 資訊 */
;
這種資料模型區別於 aggregate 和 uniq 模型。資料完全按照匯入檔案中的資料進行儲存,不會有任何聚合。即使兩行資料完全相同,也都會保留。 而在建表語句中指定的 duplicate key,只是用來指明底層資料按照那些列進行排序。(更貼切的名稱應該為 「sorted column」,這裡取名 「duplicate key」 只是用以明確表示所用的資料模型。
reference
get,post,jsonp資料互動 百度下拉列表
三種資料互動形式 get post jsonp 一 get請求 1.引入 vue.js 和 vue resource.js 準備乙個按鈕 input type button value 按鈕 click get 點選按鈕請求資料函式get 2.準備乙個txt檔案 welcome vue 3.編寫js...
百度 mysql的sql優化 SQL優化問題
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 select cust.code,org.name4 district,org.name3 center,org.name2 org,org.name1,cont.contract code contract num,req.biz type,req.l...
自百度6 28事件後的自我反省
相信很多站長都難逃6.28事件的影響,筆者也在此次風波當中被徹底的擊敗,而且敗的是淋漓盡致 筆者幾乎所有 都倒下了,無論是正規的 還是擦邊的 都沒辦法逃過此次劫難,最讓人可悲的是事後無論如何去分析原因 都沒辦法摸透究竟 哪個因素會導致大規模k站,直到最後官方發布事件宣告才稍微了解到問題的所在。一 6...