Doris分區與分桶(八)

接上篇----------Doris 建表示例

Doris 支持兩層的數據劃分。第一層是 Partition,支持 Range 和 List 的劃分方式。第二層是 Bucket(Tablet),僅支持 Hash 的劃分方式。

也可以僅使用一層分區。使用一層分區時,只支持 Bucket 劃分。

Partition
  • Partition 列可以指定一列或多列。分區類必須為 KEY 列。

  • 不論分區列是什么類型,在寫分區值時,都需要加雙引號。

  • 分區數量理論上沒有上限。

  • 當不使用 Partition 建表時,系統會自動生成一個和表名同名的,全值范圍的Partition。該 Partition 對用戶不可見,并且不可刪改。

Range 分區

分區列通常為時間列,以方便的管理新舊數據。不可添加范圍重疊的分區。 Partition 指定范圍的方式

VALUES LESS THAN (...) 僅指定上界,系統會將前一個分區的上界作為該分區的下界,生成一個左閉右開的區間。分區的刪除不會改變已存在分區的范圍。刪除分區可能出現空洞。

VALUES [...) 指定同時指定上下界,生成一個左閉右開的區間。

通過 VALUES [...) 同時指定上下界比較容易理解。這里舉例說明,當使用 VALUES LESS THAN (...) 語句進行分區的增刪操作時,分區范圍的變化情況:

(1)如上 expamle_range_tbl 示例,當建表完成后,會自動生成如下 3 個分區:

p201701: [MIN_VALUE, 2017-02-01)
p201702: [2017-02-01, 2017-03-01)
p201703: [2017-03-01, 2017-04-01)

(2)增加一個分區 p201705 VALUES LESS THAN ("2017-06-01"),分區結果如下:

p201701: [MIN_VALUE, 2017-02-01)
p201702: [2017-02-01, 2017-03-01)
p201703: [2017-03-01, 2017-04-01)
p201705: [2017-04-01, 2017-06-01)

(3)此時刪除分區 p201703,則分區結果如下:

p201701: [MIN_VALUE, 2017-02-01)
p201702: [2017-02-01, 2017-03-01)
p201705: [2017-04-01, 2017-06-01)

注意到 p201702 和 p201705 的分區范圍并沒有發生變化,而這兩個分區之間,出現了一個空洞:[2017-03-01, 2017-04-01)。即如果導入的數據范圍在這個空洞范圍內,是無法導入的。

(4)繼續刪除分區 p201702,分區結果如下:

p201701: [MIN_VALUE, 2017-02-01)
p201705: [2017-04-01, 2017-06-01)

空洞范圍變為:[2017-02-01, 2017-04-01)

(5)現在增加一個分區 p201702new VALUES LESS THAN ("2017-03-01"),分區結果如下:

p201701: [MIN_VALUE, 2017-02-01)
p201702new: [2017-02-01, 2017-03-01)
p201705: [2017-04-01, 2017-06-01)

可以看到空洞范圍縮小為:[2017-03-01, 2017-04-01)

(6)現在刪除分區 p201701,并添加分區 p201612 VALUES LESS THAN ("2017-01-01"),分區結果如下:

p201612: [MIN_VALUE, 2017-01-01)
p201702new: [2017-02-01, 2017-03-01)
p201705: [2017-04-01, 2017-06-01)

即出現了一個新的空洞:[2017-01-01, 2017-02-01)

List 分區

分 區 列支 持 BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME, CHAR, VARCHAR 數據類型,分區值為枚舉值。只有當數據為目標分區枚舉值

其中之一時,才可以命中分區。不可添加范圍重疊的分區。

Partition 支持通過 VALUES IN (...) 來指定每個分區包含的枚舉值。下面通過示例說明,進行分區的增刪操作時,分區的變化。

(1)如上 example_list_tbl 示例,當建表完成后,會自動生成如下 3 個分區:

p_cn: ("Beijing", "Shanghai", "Hong Kong")
p_usa: ("New York", "San Francisco")
p_jp: ("Tokyo")

(2)增加一個分區 p_uk VALUES IN ("London"),分區結果如下:

p_cn: ("Beijing", "Shanghai", "Hong Kong")
p_usa: ("New York", "San Francisco")
p_jp: ("Tokyo")
p_uk: ("London")

(3)刪除分區 p_jp,分區結果如下:

p_cn: ("Beijing", "Shanghai", "Hong Kong")
p_usa: ("New York", "San Francisco")
p_uk: ("London")

Bucket

(1)如果使用了 Partition,則 DISTRIBUTED ... 語句描述的是數據在各個分區內的劃分規則。如果不使用 Partition,則描述的是對整個表的數據的劃分規則。

(2)分桶列可以是多列,但必須為 Key 列。分桶列可以和 Partition 列相同或不同。

(3)分桶列的選擇,是在 查詢吞吐 和 查詢并發 之間的一種權衡:

  • ① 如果選擇多個分桶列,則數據分布更均勻。如果一個查詢條件不包含所有分桶列的等值條件,那么該查詢會觸發所有分桶同時掃描,這樣查詢的吞吐會增加,單個查詢的延遲隨之降低。這個方式適合大吞吐低并發的查詢場景。

  • ② 如果僅選擇一個或少數分桶列,則對應的點查詢可以僅觸發一個分桶掃描。此時,當多個點查詢并發時,這些查詢有較大的概率分別觸發不同的分桶掃描,各個查詢之間的 IO 影響較小(尤其當不同桶分布在不同磁盤上時),所以這種方式適合高并發的點查詢場景。

(4)分桶的數量理論上沒有上限。

使用復合分區的場景

以下場景推薦使用復合分區

(1)有時間維度或類似帶有有序值的維度,可以以這類維度列作為分區列。分區粒度可以根據導入頻次、分區數據量等進行評估。

(2)歷史數據刪除需求:如有刪除歷史數據的需求(比如僅保留最近 N 天的數據)。使用復合分區,可以通過刪除歷史分區來達到目的。也可以通過在指定分區內發送 DELETE 語句進行數據刪除。

(3)解決數據傾斜問題:每個分區可以單獨指定分桶數量。如按天分區,當每天的數據量差異很大時,可以通過指定分區的分桶數,合理劃分不同分區的數據,分桶列建議選擇區分度大的列。

多列分區

Doris 支持指定多列作為分區列,示例如下:

1)Range 分區
PARTITION BY RANGE(`date`, `id`)
(PARTITION `p201701_1000` VALUES LESS THAN ("2017-02-01", "1000"),PARTITION `p201702_2000` VALUES LESS THAN ("2017-03-01", "2000"),PARTITION `p201703_all` VALUES LESS THAN ("2017-04-01")
)

指定?date(DATE 類型) 和?id(INT 類型) 作為分區列。以上示例最終得到的分區如下:

p201701_1000: [(MIN_VALUE, MIN_VALUE), ("2017-02-01", "1000") )
p201702_2000: [("2017-02-01", "1000"), ("2017-03-01", "2000") )
p201703_all: [("2017-03-01", "2000"), ("2017-04-01", MIN_VALUE))

注意,最后一個分區用戶缺省只指定了?date?列的分區值,所以?id?列的分區值會默認填充?MIN_VALUE。當用戶插入數據時,分區列值會按照順序依次比較,最終得到對應的分區。舉例如下:

數據 --> 分區
2017-01-01, 200 --> p201701_1000
2017-01-01, 2000 --> p201701_1000
2017-02-01, 100 --> p201701_1000
2017-02-01, 2000 --> p201702_2000
2017-02-15, 5000 --> p201702_2000
2017-03-01, 2000 --> p201703_all
2017-03-10, 1 --> p201703_all
2017-04-01, 1000 --> 無法導入
2017-05-01, 1000 --> 無法導入
2)List 分區
PARTITION BY LIST(`id`, `city`)
(PARTITION `p1_city` VALUES IN (("1", "Beijing"), ("1", "Shanghai")),PARTITION `p2_city` VALUES IN (("2", "Beijing"), ("2", "Shanghai")),PARTITION `p3_city` VALUES IN (("3", "Beijing"), ("3", "Shanghai"))
)

指定?id(INT 類型) 和?city(VARCHAR 類型) 作為分區列。最終得到的分區如下:

p1_city: [("1", "Beijing"), ("1", "Shanghai")]
p2_city: [("2", "Beijing"), ("2", "Shanghai")]
p3_city: [("3", "Beijing"), ("3", "Shanghai")]

當用戶插入數據時,分區列值會按照順序依次比較,最終得到對應的分區。舉例如下:

數據 ---> 分區
1, Beijing ---> p1_city
1, Shanghai ---> p1_city
2, Shanghai ---> p2_city
3, Beijing ---> p3_city
1, Tianjin ---> 無法導入
4, Beijing ---> 無法導入

接下篇----------Doris的PROPERTIES與ENGINE

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

低成本打造便攜式無線網絡攻防學習環境

1.摘要 一直以來, 無線網絡安全問題與大眾的個人隱私息息相關, 例如: 為了節省流量, 連接到一個看似安全的免費WiFi, 在使用過程中泄露自己的各類密碼信息甚至銀行卡賬號密碼信息。隨著家用智能電器的普及, 家中的各類智能設備連入家里的無線網絡, 卻突然失靈, 甚至無法正常連…

模擬Spring源碼思想,手寫源碼,理解注解

1、BeanDefinition package com.csdn.myspring; import lombok.AllArgsConstructor; import lombok.Data; Data AllArgsConstructor public class BeanDefinition {private String beanName;private Class beanClass; }2、掃描包的工具類MyTools package com.csdn.myspring; im…

@Scheduled注解 定時任務講解

用于在Java Spring框架中定時執行特定任務的注解 Scheduled,它能夠指定方法在特定時間間隔或特定時間點執行。默認參數是cron,cron參數被用來定義一個Cron表達式,它代表了任務執行的時間規則 參數如下 Cron 這是是一種時間表達式&#xff…

【應用程序啟動過程-三種加載控制器的方式-上午內容復習 Objective-C語言】

一、我們先來回憶一下,上午所有內容 1.首先呢,我們先說的是這個“應用程序啟動過程”, 應用程序啟動過程里面,有三方面內容 1)UIApplication對象介紹 2)AppDelegate對象介紹 3)應用程序啟動過程 現在不知道大家對這個應用程序啟動過程有印象嗎, 2.首先,這個UIAp…

MySQL數據庫時間計算的用法

今天給大家分享如何通過MySQL內置函數實現時間的轉換和計算,在工作當中,測試人員經常需要查詢數據庫表的日期時間,但發現開發人員存入數據庫表的形式都是時間戳形式,不利于測試人員查看,測試人員只能利用工具對時間戳進…

【 順序表經典算法—移除元素和合并兩個有序數組】

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 前言 經典算法OJ題1: 移除元素 解法一、逐個判斷 解法二、雙指針覆蓋 經典算法OJ題2: 合并兩個有序數組 OJ題分為兩個類型: 總結 前言…

MAX/MSP SDK學習07:list傳遞

實現自定義Obejct,要求將傳入的一組數據100后傳出。 #include "ext.h" #include "ext_obex.h" typedef struct _listTrans {t_object ob;void* outLet;t_atom* fArr;long listNum;} t_listTrans;void* listTrans_new(t_symbol* s, long arg…

14.Python 模塊

目錄 1. 使用模塊2. 使用包3. 常用模塊3.1 日期和時間3.2 偽隨機數3.3 摘要算法3.4 JSON 處理3.5 圖像處理 模塊是Python用來組織代碼的一種方法,包是Python用來組織模塊的一種方法。 1. 使用模塊 Python 把能夠相互包含,且有組織的代碼段稱為模塊&…

.NET面試題1

1.什么是C#? C#(讀作"C sharp")是一種通用的、面向對象的編程語言,由Microsoft開發。它是一種靜態類型語言,支持強類型檢查和面向對象編程(OOP)的概念。C#主要用于開發Windows應用程序…

Bug等級劃分

Bug是指在程序或系統中存在的錯誤、缺陷或異常,是由于編碼錯誤、設計問題、邏輯錯誤或其他因素導致的。 常見的Bug分類方法 功能性Bug與軟件的功能有關,軟件無法正常工作、功能與需求不符或功能執行不正確。 用戶界面Bug與軟件的用戶界面有關&#xff…

Unity中Shader雙向反射分布函數BRDF

文章目錄 前言一、渲染方程二、什么是BxDF1、BSSRDF2、BRDF3、BTDF4、BSDF 三、迪士尼原則的BRDF四、迪士尼原則的BRDF的參數五、在Unity中看一下默認Shader的這些參數六、在這里記錄一下使用 Blender 和 SubstancePainter 的流程1、在Blender中導出模型為 .obj 格式2、在Subst…

Android WMS—— Surace管理 (二十)

WMS 負責創建 Surface 以及對 Surface 的擺放工作,之后將 Surface 提交給SurfaceFlinger 進行合并。在 App 層也創建了一個 Surface 對象,但是那個是空對象,用于 WMS 的填充。 一、Surface的創建 首先 APP 層在 ViewRootImpl 的 relayoutWindow() 方法中發起創建任務。 1、…

Go 實現網絡代理

使用 Go 語言開發網絡代理服務可以通過以下步驟完成。這里,我們將使用 golang.org/x/net/proxy 包來創建一個簡單的 SOCKS5 代理服務作為示例。 步驟 1. 安裝 golang.org/x/net/proxy 包 使用以下命令安裝 golang.org/x/net 包,該包包含 proxy 子包&am…

天軟特色因子看板 (2023.11 第12期)

該因子看板跟蹤天軟特色因子A05006(近一月單筆流入流出金額之比(%),該因子為近一個月單筆流入流出金額之比(%)均值因子,用以刻畫在 市場日內分時成交中流入、流出成交金額的差異性特點,發掘市場主力資金的作用機制。 今日為該因子跟蹤第12期&…

expect腳本在自動化部署中的具體應用案例

#expect腳本在自動化部署中的具體應用 expect腳本是一個非常好的交互式應用腳本,在自動化部署中,可以使用這個腳本來實現全自動的自動化部署。下面是一些具體的應用案例。 場景一:自動安裝mysql 可以使用expect腳本來實現mysql自動安裝&…

Windows平臺Unity下實現camera場景推送RTMP|輕量級RTSP服務|實時錄像

技術背景 我們在對接Unity平臺camera場景采集的時候,除了常規的RTMP推送、錄像外,還有一些開發者,需要能實現輕量級RTSP服務,對外提供個拉流的RTSP URL。 目前我們在Windows平臺Unity下數據源可采集到以下部分: 采集…

@PostConstruct雖好,請勿亂用

1.問題說明 在日常的業務開發中,有時會利用PostConstruct在容器啟動時執行一些任務。例如: PostConstruct public void init(){System.out.println("service 初始化..............."); }一般情況這沒什么問題,但最近一個同事在做…

ui5使用echart

相關的代碼已經發布到github上。 展示下相關的實現功能 1、柱狀圖-1 2、柱狀圖-2 3.折線圖 4.餅狀圖 如何使用: 使用git clone項目到本地 git clone https://github.com/linhuang0405/com.joker.Zechart找到index.html。在vscode里右鍵選擇Open with Live Serve…

1

【任務 1】私有云服務搭建[10 分] 【題目 1】基礎環境配置[0.5 分] 【題目 2】Yum 源配置[0.5 分] 【題目 3】配置無秘鑰 ssh[0.5 分] 【題目 4】基礎安裝[0.5 分] 【題目 5】數據庫安裝與調優[0.5 分] 【題目 6】Keystone 服務安裝與使用[0.5 分] 【題目 7】Glance 安裝與使用…

BLE通用廣播包

文章目錄 1、藍牙廣播數據格式2、掃描響應數據 1、藍牙廣播數據格式 藍牙廣播包的最大長度是37個字節,其中設備地址占用了6個字節,只有31個字節是可用的。這31個可用的字節又按照一定的格式來組織,被分割為n個AD Structure。如下圖所示&…