數(shù)據(jù)字典
在數(shù)倉(cāng)開(kāi)發(fā)和數(shù)據(jù)分析過(guò)程中,當(dāng)業(yè)務(wù)中有常量數(shù)據(jù)或者業(yè)務(wù)數(shù)據(jù)可以劃分為業(yè)務(wù)事實(shí)表和業(yè)務(wù)維度表時(shí),您可以通過(guò)使用數(shù)據(jù)字典來(lái)替代維度表實(shí)現(xiàn),避免使用Join語(yǔ)句,從而提升查詢效率。本文為您介紹云數(shù)據(jù)庫(kù)ClickHouse如何新建、修改和使用外部擴(kuò)展字典。
前提條件
數(shù)據(jù)源與目標(biāo)集群使用了相同的VPC,且在同一地域下,并將彼此的IP添加到了對(duì)方白名單中。如果不滿足此條件,請(qǐng)先解決網(wǎng)絡(luò)問(wèn)題。具體操作,請(qǐng)參見(jiàn)如何解決目標(biāo)集群與數(shù)據(jù)源網(wǎng)絡(luò)互通問(wèn)題。
您可以通過(guò)SELECT * FROM system.clusters;
命令查看云數(shù)據(jù)庫(kù)ClickHouse集群的IP地址。
ClickHouse如何添加白名單,請(qǐng)參見(jiàn)設(shè)置白名單。
注意事項(xiàng)
以下版本的云數(shù)據(jù)庫(kù)ClickHouse集群不支持通過(guò)控制臺(tái)管理數(shù)據(jù)字典。如需創(chuàng)建,您可以通過(guò)SQL查看和創(chuàng)建數(shù)據(jù)字典。具體操作,請(qǐng)參見(jiàn)創(chuàng)建字典。
21.8及以上版本的云數(shù)據(jù)庫(kù)ClickHouse社區(qū)兼容版集群。
云數(shù)據(jù)庫(kù)ClickHouse企業(yè)版集群。
新建字典配置
在頁(yè)面左上角,選擇目標(biāo)集群所在的地域。
在集群列表頁(yè)面,選擇默認(rèn)實(shí)例列表,單擊目標(biāo)集群ID。
在左側(cè)導(dǎo)航欄,單擊字典管理,進(jìn)入字典列表頁(yè)面。
單擊右上角新增字典配置。
在彈出的新增字典配置窗口編輯模板填寫字典內(nèi)容。
此處只介紹字典配置的主要參數(shù),更多參數(shù),請(qǐng)參見(jiàn)Dictionaries。
參數(shù)
描述
<name>
自定義字典名稱,必須全局唯一。
<source>
配置字典的數(shù)據(jù)源,表示字典中的數(shù)據(jù)來(lái)源。目前ClickHouse支持的數(shù)據(jù)源為:
MySQL
ClickHouse
<lifetime>
字典中數(shù)據(jù)的更新頻率,單位:秒。
<layout>
內(nèi)存中的數(shù)據(jù)格式類型,目前擴(kuò)展字典共擁有7種類型。
單數(shù)值key
flat
hashed
range_hashed
cache
復(fù)合key
complex_key_hashed
complex_key_cache
ip_trie
<structure>
字典的數(shù)據(jù)結(jié)構(gòu)。
說(shuō)明單次只允許添加一個(gè)節(jié)點(diǎn)。
填寫完畢后單擊確定,數(shù)據(jù)字典創(chuàng)建完成。
創(chuàng)建成功后,在數(shù)據(jù)字典對(duì)應(yīng)的操作列,可進(jìn)行查看、刪除和修改。
字典表DDL
云數(shù)據(jù)庫(kù)ClickHouse集群20.8之后的版本(您可以登錄ClickHouse控制臺(tái)-集群信息-查看版本號(hào))增加了數(shù)據(jù)字典的DDL,您可以直接使用DDL語(yǔ)句新建擴(kuò)展字典表。
CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster]
(
key1 type1 [DEFAULT|EXPRESSION expr1] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
key2 type2 [DEFAULT|EXPRESSION expr2] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
attr1 type2 [DEFAULT|EXPRESSION expr3],
attr2 type2 [DEFAULT|EXPRESSION expr4]
)
PRIMARY KEY key1, key2
SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN]))
LAYOUT(LAYOUT_NAME([param_name param_value]))
LIFETIME([MIN val1] MAX val2)
數(shù)據(jù)字典的使用
字典表查詢
SELECT
name,
type,
key,
attribute.names,
attribute.types,
bytes_allocated,
element_count,
source
FROM system.dictionaries
查詢字典數(shù)據(jù)
使用dictGet函數(shù)獲取數(shù)據(jù)字典中的數(shù)據(jù)。dictGet函數(shù)的更多詳情,請(qǐng)參見(jiàn)ClickHouse官方文檔。
dictGet(<dict_name>, <attr_name>, <id_expr>)
dictGetOrDefault(<dict_name>, <attr_name>, <id_expr>, <default_value_expr>)