1. 算数函数
1.1 求和 plus
1 | SELECT plus(12, 21), plus(10, -10), plus(-10, -10) ; |
1,2 求差值 minus
1 | SELECT minus(10, 5), minus(10, -10),minus(-10, -10); |
1.3 求积 multiply
1 | SELECT multiply(12, 2), multiply(12, -2), multiply(-12, -2); |
1.4 求商 divide
1 | SELECT divide(12, 4), divide(10, 3), divide(2, 4); |
1.5 求余数 modulo
1 | SELECT modulo(10, 3), modulo(10.5, 3); |
1.6 取反 negate
1 | SELECT negate(10), negate(-10); |
1.7 绝对值 abs
1 | SELECT abs(-10), abs(10); |
1.8 最大公约数 gcd
1 | SELECT gcd(12, 24), gcd(-12, -24), gcd(10, 6); |
1.9 最小公倍数 lcm
1 | SELECT lcm(12, 24), lcm(-12, -24), lcm(-3, 4); |
1.10 随机数 rand
- 随机函数使用非加密方式生成伪随机数字。
- 所有随机函数都只接受一个参数或不接受任何参数。
- 您可以向它传递任何类型的参数,但传递的参数将不会使用在任何随机数生成过程中。
- 此参数的唯一目的是防止公共子表达式消除,以便在相同的查询中使用相同的随机函数生成不同的随机数
| 函数 | 说明 |
|---|---|
| rand | 返回一个UInt32类型的随机数字,所有UInt32类型的数字被生成的概率均相等 |
| rand64 | 返回一个UInt64类型的随机数字,所有UInt64类型的数字被生成的概率均相等。 |
| randConstant | 返回一个UInt32类型的随机数字,该函数不同之处在于仅为每个数据块产生一个随机数。 |
1 | SELECT rand(),rand(10); |
2. 比较函数
2.1 相等 equals
1 | SELECT equals(12, 12), equals(12, 13), equals('aa', 'aa'), equals('aa','bb'); |
2.2 不等 notEquals
1 | SELECT notEquals(12, 12), notEquals(12, 13), notEquals('aa', 'aa'), notEquals('aa','bb'); |
2.3 大于 greater
1 | SELECT greater(12, 10), greater(10, 12), greater(12, 12); |
2.4 大于等于 greaterOrEquals
1 | SELECT greaterOrEquals(12,10), greaterOrEquals(12,12); |
2.5 小于 less
1 | SELECT less(12, 21), less(12, 10), less(120, 120); |
2.6 小于等于 lessOrEquals
1 | SELECT lessOrEquals(12, 120), lessOrEquals(12, 11); |
3. 取整函数
3.1 向下取整:floor
- floor(x[,N])
1 | -- 向下取整 |
3.2 向上取整:ceil
- ceil(x[, N]) 或者 ceiling(x[, N])
1 | -- 向上取整 |
3.3 四舍五入:round
round(expression [, decimal_places])
decimal_places = 0:取整数,0 可省略
decimal_places > 0:将值舍入小数点右侧
decimal_places < 0:将小数点左侧的值四舍五入
1 | -- 四舍五入取整 |
3.4 向下舍入到2^x roundToExp2
- 接受一个数字。它将数字向下舍入到最接近的(整个非负)2的x次幂。
1 | SELECT roundToExp2(9); |
4. 逻辑函数
逻辑函数可以接受任何数字类型的参数,并返回UInt8类型的 0 或 1
当向函数传递零时,函数将判定为 false ,否则,任何其他非零的值都将被判定为 true。
4.1 与 and
1 | SELECT and(equals(12, 12), notEquals(12, 10)); |
4.2 或 or
1 | SELECT or(equals(12, 12), notEquals(12, 10)); |
4.3 非 not
1 | SELECT not 12, not 0; |
4.4 异或 xor
1 | SELECT xor(0, 1, 1); |
5. Hash函数
5.1 MD5
1 | SELECT MD5('HELLO WORLD!'); |
5.2 halfMD5
- 计算字符串的MD5值
1 | SELECT halfMD5('HELLO WORLD!'); |
5.3 intHash
- 为任何类型的整数计算32位的哈希。
- 这是相对高效的非加密Hash函数
- 从任何类型的整数计算64位哈希码。 它的工作速度比intHash32函数快。
- 计算任意数量字符串的CityHash64或使用特定实现的Hash函数计算任意数量其他类型的Hash。
1 | SELECT |
5.4 sha加密
- 使用sha1或者sha224加密的话,只能用于字符串
1 | SELECT |
5.5 farmHash
- farmHash64(s) 计算字符串的FarmHash64。
- 接受一个String类型的参数。
- 返回UInt64。
1 | SELECT farmHash64('hello world') |
5.6 javaHash
- javaHash(s) 计算字符串的JavaHash。
- 接受一个String类型的参数。
- 返回Int32。
1 | SELECT javaHash('hello world'); |
5.7 hiveHash
- hiveHash(s) 计算字符串的HiveHash。
- 与JavaHash相同,但不会返回负数
- 接受一个String类型的参数。
- 返回Int32。
1 | SELECT hiveHash('hello world'); |
6. 类型转换函数
6.1 转换为数值
1 | SELECT toInt8(12.3334343), toFloat32(10.001), toFloat64(1.000040); |
6.2 转换为字符串
1 | -- 时间转换字符串 |
6.3 转换为值类型
1 | SELECT |
7 条件函数
7.1 三元运算符
if ( cond, then, else )
cond != 0 则返回 then,如果 cond == 0 则返回else 。
cond 必须是 UInt8 类型,then 和 else 必须存在最低的共同类型。
then 和 else 可以是 NULL
中文字符使用双引号,英文字符可不使用引号也可使用当引号或双引号
1 | SELECT |
7.2 多个条件判断 multiIf
multiIf( cond_1, then_1, cond_2, then_2, …, else )
cond_N— 函数返回的条件then_N。then_N— 函数执行时的结果。else— 不满足任何条件时的函数结果。编写类似 case 的运算符,可以接收 2n+1 个参数
该函数返回值之一
then_Norelse,具体取决于条件cond_N
1 | SELECT |
8. UUID函数
8.1 generateUUIDv4 (生成随机UUID)
- generateUUIDv4() 返回 UUID类型的值。
1 | -- 随机生成一个UUIDv4的字符串 |
8.2 toUUID(s) (String 转 UUID)
1 | SELECT |
8.3 UUIDNumToString() (FixedString(16) 转换成 UUID)
- 接受一个FixedString(16)类型的值,返回其对应的String表现形式。
1 | SELECT 'abcdefghijklmnop' AS bytes,UUIDNumToString(toFixedString(bytes, 16)) AS uuid; |
8.4 UUIDStringToNum (将 UUID 转换成FixedString(16))
接受一个String类型的值,
其中包含36个字符且格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,
将其转换为UUID的数值并以FixedString(16)将其返回。
1 | SELECT '61626364-6566-6768-696a-6b6c6d6e6f70' AS uuid,UUIDStringToNum(uuid) AS bytes; |
9. URL函数
https://clickhouse.tech/docs/zh/sql-reference/functions/url-functions/#cuturlparameterurl-name
9.1 protocol(截取传输协议)
1 | -- 截取协议 |
9.2 domain (获取域名)
1 | SELECT domain('http://www.baidu.com'); |
9.3 domainWithoutWWW (返回域名并删除首个3w)
1 | SELECT domainWithoutWWW('http://www.baidu.com'),domainWithoutWWW('www.baidu.com'); |
9.4 topLevelDomain(获取顶级域名)
1 | SELECT topLevelDomain('http://www.google.com.cn'); |
9.5 firstSignificantSubdomain(第一个有效子域名)
1 | -- 返回“第一个有效子域名” |
9.6 path(返回URL路径)
1 | -- 返回URL路径 |
9.7 pathFull(返回URL路径包括参数)
1 | SELECT pathFull('https://www.baidu.com/aaa/bbb/ccc/ddd?i=10'); |
9.8 queryString(请求参数)
1 | SELECT queryString('https://www.baidu.com/aaa/bbb/ccc/ddd?i=10'); |
9.9 fragment (fragment标识)
返回URL的fragment标识。fragment不包含#。
1 | SELECT fragment('https://clickhouse.yandex/#quick-start'); |
9.10 queryStringAndFragment(请求参数和fragment标识)
1 | SELECT queryStringAndFragment('https://www.baidu.com/s?ie=utf-8&rsv_sug7=100#eiai'); |
9.11 cutWWW(删除 3w)
删除URL中的部分内容 (如果URL中不包含指定的部分,则URL不变。)
1 | SELECT cutWWW('https://www.baidu.com'); |
9.12 cutQueryString(删除请求参数)
1 | SELECT cutQueryString('http://www.baidu.com/1?page=1'); |
9.13 cutFragment (删除fragment标识)
1 | SELECT cutFragment('http://www.baidu.com/#quick-demo'); |
9.14 cutQueryStringAndFragment(删除请求参数以及fragment标识)
1 | SELECT cutQueryStringAndFragment('http://www.baidu.com/1?page=23#we'); |
9.15 cutURLParameter(删除URL参数)
- cutURLParameter(URL, name) 删除URL中名称为‘name’的参数。
1 | SELECT cutURLParameter('http://www.baidu.com/1?page=1#erre&resv=23&name=user','name'); |
10. 字典函数
https://clickhouse.tech/docs/en/sql-reference/functions/ext-dict-functions/
10.1 创建字典
- 数据格式,以 csv 格式上传到服务器
| id | code | name |
|---|---|---|
| 1 | a0001 | 研发部 |
| 2 | a0002 | 产品部 |
| 3 | a0003 | 数据部 |
- 编辑配置文件
1 | vim /etc/clickhouse-server/flat_dictionary.xml |
- 验证字典是否创建成功
在上述的配置中,source数据源是 CSV 格式的文件,structure 数据结构与其对应。将配置文件复制到 ClickHouse 服务节点的 /etc/clickhouseserver 目录后,即完成了对该字典的创建过程。查验 system.dictionaries 系统表后,能够看到flat字典已经创建成功。
1 | SELECT name,type,key.names,key.types,attribute.names,attribute.types,origin FROM system.dictionaries; |
10.2 dictGet
- dictGet(‘dict_name’, attr_names, id_expr)
dict_name— 字典名称。字符串文字attr_names— 字典列的名称,字符串文字,或列名称元组id_expr- ID表达式 返回字典键类型值或元组类型值,具体取决于字典配置。- 如果字典中没有 id 键,则返回字典描述中指定的默认值。
1 | select dictGet('test_flat_dict','name',toUInt64(1)) as dept_name; |
10.3 dictGetTOrDefault
- dictGetOrDefault(‘dict_name’, attr_names, id_expr, default_value_expr)
dict_name— 字典名称。字符串文字attr_names— 字典列的名称,字符串文字,或列名称元组id_expr- ID表达式 返回字典键类型值或元组类型值,具体取决于字典配置。default_value_expr— 如果字典不包含带有id_expr键的行,则返回值。表达式或元组( Expression ),返回为attr_names属性配置的数据类型中的一个或多个值。
1 | SELECT dictGetOrDefault('test_flat_dict', 'name', toUInt64(1),'未找到') AS dept_name; |
10.4 dictGetXX (获取指定类型数据)
| 获取整型数据 | 获取整型数据 | 获取浮点数据 | 获取日期数据 | 获取字符串数据 |
|---|---|---|---|---|
| dictGetUInt8 | dictGetInt8 | dictGetFloat32 | dictGetDate | dictgetuid |
| dictGetUInt16 | dictGetInt16 | dictGetFloat64 | dictGetDateTime | dictGetString |
| dictGetUInt32 | dictGetInt32 | |||
| dictGetUInt64 | dictGetInt64 |
1 | SELECT dictGetString('test_flat_dict', 'name', toUInt64(1)) AS dept_name; |
10.5 dictHas
- dictHas(‘dict_name’, id_expr)
dict_name— 字典名称。字符串文字id_expr- 核心价值。表达式 返回字典键类型值或 元组 类型值,具体取决于字典配置。- 检查字典是否存在指定的 id
- 如果不存在,则返回0
- 如果存在,则返回1
1 | SELECT dictHas('test_flat_dict',toUInt64(1)) AS hasVal,dictHas('test_flat_dict',toUInt64(50)) AS hasVal2; |