ClickHouse函数介绍
ClickHouse函數介紹
ClickHouse中至少存在兩種類型的函數 :常規函數和聚合函數。 常規函數的工作就像分別為每一行執行一次函數計算一樣(對于每一行,函數的結果不依賴于其他行)。 聚合函數則從各行累積一組值(即函數的結果依賴整個結果集)。
1. 常規函數
1.1 算數函數
對于所有算術函數,如果存在這樣的類型,則結果類型將計算為結果適合的最小數字類型。 根據位數、是否有符號、是否浮點數,同時取最小值。 如果沒有足夠的位,則采用最高位類型,如:
算術函數適用于UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64,Float32或Float64中的任何類型。
相加:
select plus(5, 10); ┌─plus(5, 10)─┐ │ 15 │ └─────────────┘還可以將Date或DateTime與整數進行相加。在Date的情況下,和整數相加整數意味著添加相應的天數。對于DateTime,這意味著添加相應的秒數。
select plus(cast('2021-07-27' as date),3); ┌─plus(CAST('2021-07-27', 'date'), 3)─┐ │ 2021-07-30 │ └─────────────────────────────────────┘相減:
select minus(15, 10); ┌─minus(15, 10)─┐ │ 5 │ └───────────────┘還可以將Date或DateTime與整數進行相減,參考上面的相加計算。
相乘:
select multiply(3, 5); ┌─multiply(3, 5)─┐ │ 15 │ └────────────────┘相除:
select divide(12, 5); ┌─divide(12, 5)─┐ │ 2.4 │ └───────────────┘divide不是整數除法,結果類型始終是浮點類型。對于整數除法,請使用’intDiv’函數,‘intDiv’向下舍入取整(按絕對值),除以零或將最小負數除以-1時拋出異常。可以使用’intDivOrZero’,它在除以零或將最小負數除以-1時返回零。
select intDiv(12, 5); ┌─intDiv(12, 5)─┐ │ 2 │ └───────────────┘ select intDivOrZero(12, 0); ┌─intDivOrZero(12, 0)─┐ │ 0 │ └─────────────────────┘取余:
select modulo(12, 5); ┌─modulo(12, 5)─┐ │ 2 │ └───────────────┘如果參數是浮點數,則通過刪除小數部分將它們預轉換為整數。除以零或將最小負數除以-1時拋出異常,可以使用moduloOrZero,它在除以0時結果返回0。
select moduloOrZero(12, 0); ┌─moduloOrZero(12, 0)─┐ │ 0 │ └─────────────────────┘絕對值:
select abs(-12); ┌─abs(-12)─┐ │ 12 │ └──────────┘1.2 比較函數
比較函數始終返回0或1(UInt8)。
可以比較以下類型:
- 數字
- String 和 FixedString
- 日期
- 日期時間
以上每個組內的類型均可互相比較,但是對于不同組的類型間不能夠進行比較。例如,您無法將日期與字符串進行比較。您必須使用函數將字符串轉換為日期,反之亦然。
字符串按字節進行比較。較短的字符串小于以其開頭并且至少包含一個字符的所有字符串。
1.3 類型轉換函數
該部分內容較多,詳見另一篇:ClickHouse類型轉換函數
1.4 GEO函數
使用great-circle distance公式計算地球表面兩點之間的距離
輸入參數
- lon1Deg — 第一個點的經度,單位:度,范圍: [-180°, 180°]。
- lat1Deg — 第一個點的緯度,單位:度,范圍: [-90°, 90°]。
- lon2Deg — 第二個點的經度,單位:度,范圍: [-180°, 180°]。
- lat2Deg — 第二個點的緯度,單位:度,范圍: [-90°, 90°]。
正值對應北緯和東經,負值對應南緯和西經。
返回值:地球表面的兩點之間的距離,以米為單位。當輸入參數值超出規定的范圍時將拋出異常。
示例:
SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673); ┌─greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)─┐ │ 14128353 │ └───────────────────────────────────────────────────────────────────┘1.5 IP函數
- IPv4NumToString(num):接受一個UInt32(大端)表示的IPv4的地址,返回相應IPv4的字符串表現形式,格式為A.B.C.D(以點分割的十進制數字)。
- IPv4StringToNum(s):與IPv4NumToString函數相反。如果IPv4地址格式無效,則返回0。
- IPv4NumToStringClassC(num):與IPv4NumToString類似,但使用xxx替換最后一個字節。
- IPv6NumToString(x):接受FixedString(16)類型的二進制格式的IPv6地址。以文本格式返回此地址的字符串。
- IPv6StringToNum(s):與IPv6NumToString的相反。如果IPv6地址格式無效,則返回空字節字符串。
更多常規函數詳見:ClickHouse函數
2. 聚合函數
- count(expr) 或 COUNT(DISTINCT expr)。
- count() 或 COUNT(*). 該 count() 語法是ClickHouse特定的。
語法:deltaSum(value),value — 必須是 整型 或者 浮點型 。
返回值:Integer or Float 型的算術差值和。
根據 key 數組中指定的鍵對 value 數組進行求和。傳遞 key 和 value 數組的元組與傳遞 key 和 value 的兩個數組是同義的。要統計的每一行的 key 和 value (數組)元素的數量必須相同。返回兩個數組組成的一個元組: 排好序的 key 和對應 key 的 value 之和。
示例:
更多聚合函數詳見:ClickHouse聚合函數
總結
以上是生活随笔為你收集整理的ClickHouse函数介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8x能不能升级鸿蒙,华为没有忘记老用户,
- 下一篇: 基于jsp的消防知识宣传网站ssh框架