1. 程式人生 > >ClickHouse常用函式統計

ClickHouse常用函式統計

1、統計類函式

1.1 分位數

90%分位數:

quantile(0.9)()

在求(平均)響應時間時用到,quantile(0.9)(url_rt)

1.2 中位數

median()

還未使用到,median(url_rt)

1.3 相關係數

計算x與y的相關係數,計算公式: ( x

x ) ( y y
) ( x x
) 2 ( y y ) 2
\dfrac{\sum(x-\overline{x})(y-\overline{y})}{\sqrt{\sum(x-\overline{x})^2\sum(y-\overline{y})^2}} ,取值範圍[-1,1],其絕對值越大代表線性關係越強,當相關係數為0時,表示x與y之間沒有線性相關關係(不代表沒有非線性關係):
corr(x,y)

還未使用到,corr(url_rt,hit)

2、型別轉換函式

2.1 轉換為字串

toString()

在Superset中應用較多,toString(date)

3、時間日期函式

3.1 擷取年份

toYear()

應用形式toYear(date)

3.2 擷取月份

toMonth()

應用形式toMonth(date),例如date = ‘2018-07-25’,得到結果為7

3.3 擷取天

toDayOfDay()

應用形式toDayOfDay(date),例如date = ‘2018-07-25’,得到結果為25

3.4 擷取計算星期

toDayOfWeek()

應用形式toDayOfWeek(date),例如date = ‘2018-07-25’,得到結果為3
上方

3.5 擷取計算小時

toHour()

應用形式toHour(ts),例如date = ‘2018-07-25 08:10:20’,得到結果為8

3.6 擷取計算分鐘

toMinute()

與上方類似,用在物化檢視中分鐘級聚合

3.7 擷取計算秒

toSecond()

與上方類似
以下函式與上方函式極為類似。

3.8 從截小時開始擷取

toStartOfHour()

應用形式toStartOfHour(ts),例如date = ‘2018-07-25 08:01:21’,得到結果為2018-07-25 08:00:00

4、字串處理

4.1 小寫轉換

lower()

應用形式lower('aBcA')

4.2 大寫轉換

upper()

應用形式upper('aBcA')

4.3 字串拼接

concat(s1,s2,...)

應用形式concat('adsa','121sf')

4.4 字串擷取

substring(s, offset, length)

應用形式substring('iioomAjOOBJB', 2, 3),從字串的第2位起擷取3個字元,得到ioo

4.5 字串拆分

splitByString(separator , s)

SELECT splitByString(',','afffv,safe,efwee,htrjt' ) AS temp;,結果:[‘afffv’,‘safe’,‘efwee’,‘htrjt’]。
length()結合使用,SELECT length(splitByString(',','afffv,safe,efwee,htrjt' )) AS temp_num;,結果:4。

5、搜尋函式

5.1 正則匹配之match()

  match(haystack,pattern)

應用形式match('avhsca','vh),是否由匹配欄位,字串中由’vh’字串,結果輸出為1

5.2 正則匹配之extract()

返回匹配到的第一個子串:

extract(haystack,pattern)

應用形式extract('iioomAj12123124OOBJB', '\\d+'),匹配多個數字,並返回第一個子串,結果輸出為’12123124’
extract('iioomAj12123124OOBJB', '\\[a-z]+'),匹配小寫字母的子串,並返回第一個子串,結果輸出為’iioom’

5.3 正則匹配之extractAll()

返回匹配到的所有子串:

   extractAll(haystack,pattern)

應用形式extract('iioomAj12123124OOBJB', '\\[A-Z]+'),匹配大寫字母的子串,並返回所有子串,結果輸出為[‘A’,‘OOBJB’]

5.4 正則匹配之like()

返回匹配到的資料:

   like(haystack,pattern)

可以包含:%和_等字元
一般應用於模糊查詢URL

5.5 正則匹配之notLike()

   notLike(haystack,pattern)

得到結果與like()相反。

5.6 正則替換之replaceOne()

  replaceOne(haystack,pattern,replacement)

只替換第一個匹配到的pattern。

5.7 正則替換之replaceAll()

  replaceAll(haystack,pattern,replacement)

替換匹配到的所有pattern。可以和length()函式搭配來統計某個字元的個數,SELECT (length(task_ids)-length(replaceAll(task_ids,',','')) + 1) AS task_num FROM dcm_mission_all ;統計任務的數量,task_ids可能取值為‘123,5325,564564,234’,執行後結果為:4。

5.8 正則替換之replaceRegexpAll()

 replaceRegexpAll(haystack,pattern,replacement)

與replaceAll()類似,pattern可以用正則表示,SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res;,得到:here: Hello, World!

6、條件語句

6.1 if()

if(cond,then,else)

條件cond為TRUE,返回then處的結果,否則,返回else處的結果。

7、URL操作函式

7.1 protocol()

用法:

SELECT  protocol('http://www.baidu.com.cn')

結果:http。

7.2 domain()

用法:

SELECT  domain('http://www.baidu.com.cn')

結果:www.baidu.com.cn

7.3 domainWithoutWWW()

用法:

SELECT  domainWithoutWWW('http://www.baidu.com.cn')

結果:baidu.com.cn

7.4 topLevelDomain()

用法:

SELECT topLevelDomain('http://www.baidu.com.cn')

結果:cn。

7.5 firstSignificantSubdomain()

用法:

SELECT  firstSignificantSubdomain('http://www.baidu.com.cn')`

結果:baidu。

7.6 path()

用法:

SELECT path('https://www.baidu.com/s?wd=SQL%E4%B8%AD%E7%9A%84split&rsv_spt=1&rsv_iqid=0xb79d2a30000683c8&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=SQL%2520if()&rsv_t=c9ecC9JfyBAd%2Bobx3UmEq4ZivwZzO7M%2Bar6xjhU3caPXwxMwD76F9AUI%2FaX%2B6jUYE4Lb&inputT=7416&rsv_pq=c8d2f6750000cc4e&rsv_sug3=35&rsv_sug1=35&rsv_sug7=100&rsv_sug2=0&rsv_sug4=8521')

結果:/s。

7.7 cutQueryString()

用法:

SELECT  cutQueryString('https://www.baidu.com/s?wd=SQL%E4%B8%AD%E7%9A%84split&rsv_spt=1&rsv_iqid=0xb79d2a30000683c8&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=SQL%2520if()&rsv_t=c9ecC9JfyBAd%2Bobx3UmEq4ZivwZzO7M%2Bar6xjhU3caPXwxMwD76F9AUI%2FaX%2B6jUYE4Lb&inputT=7416&rsv_pq=c8d2f6750000cc4e&rsv_sug3=35&rsv_sug1=35&rsv_sug7=100&rsv_sug2=0&rsv_sug4=8521')

結果:https://www.baidu.com/s。

8、字典函式

8.1 dictGetString()

用法:

SELECT dictGetString('ck_abc_dic', 'ck_value', tuple(_abc)) AS abc
FROM DB.TABL
WHERE date=today()
LIMIT 10;