其他函数

主机名()

返回一个字符串,其中包含执行此函数的主机的名称。 对于分布式处理,如果在远程服务器上执行此函数,则将返回远程服务器主机的名称。

basename

在最后一个斜杠或反斜杠后的字符串文本。 此函数通常用于从路径中提取文件名。

  1. basename( expr )

参数

返回值

一个String类型的值,其包含:

  • 在最后一个斜杠或反斜杠后的字符串文本内容。

    1. 如果输入的字符串以斜杆或反斜杆结尾,例如:`/``c:\`,函数将返回一个空字符串。
  • 如果输入的字符串中不包含斜杆或反斜杠,函数返回输入字符串本身。

示例

  1. SELECT 'some/long/path/to/file' AS a, basename(a)
  1. ┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
  2. some\long\path\to\file file
  3. └────────────────────────┴────────────────────────────────────────┘
  1. SELECT 'some\\long\\path\\to\\file' AS a, basename(a)
  1. ┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐
  2. some\long\path\to\file file
  3. └────────────────────────┴────────────────────────────────────────┘
  1. SELECT 'some-file-name' AS a, basename(a)
  1. ┌─a──────────────┬─basename('some-file-name')─┐
  2. some-file-name some-file-name
  3. └────────────────┴────────────────────────────┘

visibleWidth(x)

以文本格式(以制表符分隔)向控制台输出值时,计算近似宽度。
系统使用此函数实现Pretty格式。
以文本格式(制表符分隔)将值输出到控制台时,计算近似宽度。
这个函数被系统用于实现漂亮的格式。

NULL 表示为对应于 NULLPretty 格式。

  1. SELECT visibleWidth(NULL)
  2. ┌─visibleWidth(NULL)─┐
  3. 4
  4. └────────────────────┘

toTypeName(x)

返回包含参数的类型名称的字符串。

如果将NULL作为参数传递给函数,那么它返回Nullable(Nothing)类型,它对应于ClickHouse中的内部NULL

块大小()

获取Block的大小。
在ClickHouse中,查询始终工作在Block(包含列的部分的集合)上。此函数允许您获取调用其的块的大小。

实现(x)

将一个常量列变为一个非常量列。
在ClickHouse中,非常量列和常量列在内存中的表示方式不同。尽管函数对于常量列和非常量总是返回相同的结果,但它们的工作方式可能完全不同(执行不同的代码)。此函数用于调试这种行为。

ignore(…)

接受任何参数,包括NULL。始终返回0。
但是,函数的参数总是被计算的。该函数可以用于基准测试。

睡眠(秒)

在每个Block上休眠’seconds’秒。可以是整数或浮点数。

sleepEachRow(秒)

在每行上休眠’seconds’秒。可以是整数或浮点数。

当前数据库()

返回当前数据库的名称。
当您需要在CREATE TABLE中的表引擎参数中指定数据库,您可以使用此函数。

isFinite(x)

接受Float32或Float64类型的参数,如果参数不是infinite且不是NaN,则返回1,否则返回0。

isInfinite(x)

接受Float32或Float64类型的参数,如果参数是infinite,则返回1,否则返回0。注意NaN返回0。

isNaN(x)

接受Float32或Float64类型的参数,如果参数是Nan,则返回1,否则返回0。

hasColumnInTable([‘hostname’[, ‘username’[, ‘password’]],] ‘database’, ‘table’, ‘column’)

接受常量字符串:数据库名称、表名称和列名称。 如果存在列,则返回等于1的UInt8常量表达式,否则返回0。 如果设置了hostname参数,则测试将在远程服务器上运行。
如果表不存在,该函数将引发异常。
对于嵌套数据结构中的元素,该函数检查是否存在列。 对于嵌套数据结构本身,函数返回0。

酒吧

使用unicode构建图表。

bar(x, min, max, width)x = max时, 绘制一个宽度与(x - min)成正比且等于width的字符带。

参数:

  • x — 要显示的尺寸。
  • min, max — 整数常量,该值必须是Int64
  • width — 常量,可以是正整数或小数。

字符带的绘制精度是符号的八分之一。

示例:

  1. SELECT
  2. toHour(EventTime) AS h,
  3. count() AS c,
  4. bar(c, 0, 600000, 20) AS bar
  5. FROM test.hits
  6. GROUP BY h
  7. ORDER BY h ASC
  1. ┌──h─┬──────c─┬─bar────────────────┐
  2. 0 292907 █████████▋
  3. 1 180563 ██████
  4. 2 114861 ███▋
  5. 3 85069 ██▋
  6. 4 68543 ██▎
  7. 5 78116 ██▌
  8. 6 113474 ███▋
  9. 7 170678 █████▋
  10. 8 278380 █████████▎
  11. 9 391053 █████████████
  12. 10 457681 ███████████████▎
  13. 11 493667 ████████████████▍
  14. 12 509641 ████████████████▊
  15. 13 522947 █████████████████▍
  16. 14 539954 █████████████████▊
  17. 15 528460 █████████████████▌
  18. 16 539201 █████████████████▊
  19. 17 523539 █████████████████▍
  20. 18 506467 ████████████████▊
  21. 19 520915 █████████████████▎
  22. 20 521665 █████████████████▍
  23. 21 542078 ██████████████████
  24. 22 493642 ████████████████▍
  25. 23 400397 █████████████▎
  26. └────┴────────┴────────────────────┘

变换

根据定义,将某些元素转换为其他元素。
此函数有两种使用方式:

  1. transform(x, array_from, array_to, default)

x – 要转换的值。

array_from – 用于转换的常量数组。

array_to – 将’from’中的值转换为的常量数组。

default – 如果’x’不等于’from’中的任何值,则默认转换的值。

array_fromarray_to – 拥有相同大小的数组。

类型约束:

transform(T, Array(T), Array(U), U) -> U

TU可以是String,Date,DateTime或任意数值类型的。
对于相同的字母(T或U),如果数值类型,那么它们不可不完全匹配的,只需要具备共同的类型即可。
例如,第一个参数是Int64类型,第二个参数是Array(UInt16)类型。

如果’x’值等于’array_from’数组中的一个元素,它将从’array_to’数组返回一个对应的元素(下标相同)。否则,它返回’default’。如果’array_from’匹配到了多个元素,则返回第一个匹配的元素。

示例:

  1. SELECT
  2. transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,
  3. count() AS c
  4. FROM test.hits
  5. WHERE SearchEngineID != 0
  6. GROUP BY title
  7. ORDER BY c DESC
  1. ┌─title─────┬──────c─┐
  2. Yandex 498635
  3. Google 229872
  4. Other 104472
  5. └───────────┴────────┘
  1. transform(x, array_from, array_to)

与第一种不同在于省略了’default’参数。
如果’x’值等于’array_from’数组中的一个元素,它将从’array_to’数组返回相应的元素(下标相同)。 否则,它返回’x’。

类型约束:

transform(T, Array(T), Array(T)) -> T

示例:

  1. SELECT
  2. transform(domain(Referer), ['yandex.ru', 'google.ru', 'vk.com'], ['www.yandex', 'example.com']) AS s,
  3. count() AS c
  4. FROM test.hits
  5. GROUP BY domain(Referer)
  6. ORDER BY count() DESC
  7. LIMIT 10
  1. ┌─s──────────────┬───────c─┐
  2. 2906259
  3. www.yandex 867767
  4. ███████.ru 313599
  5. mail.yandex.ru 107147
  6. ██████.ru 100355
  7. █████████.ru 65040
  8. news.yandex.ru 64515
  9. ██████.net 59141
  10. example.com 57316
  11. └────────────────┴─────────┘

formatReadableSize(x)

接受大小(字节数)。返回带有后缀(KiB, MiB等)的字符串。

示例:

  1. SELECT
  2. arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes,
  3. formatReadableSize(filesize_bytes) AS filesize
  1. ┌─filesize_bytes─┬─filesize───┐
  2. 1 1.00 B
  3. 1024 1.00 KiB
  4. 1048576 1.00 MiB
  5. 192851925 183.92 MiB
  6. └────────────────┴────────────┘

至少(a,b)

返回a和b中的最小值。

最伟大(a,b)

返回a和b的最大值。

碌莽禄time拢time()

返回服务正常运行的秒数。

版本()

以字符串形式返回服务器的版本。

时区()

返回服务器的时区。

blockNumber

返回行所在的Block的序列号。

rowNumberInBlock

返回行所在Block中行的序列号。 针对不同的Block始终重新计算。

rowNumberInAllBlocks()

返回行所在结果集中的序列号。此函数仅考虑受影响的Block。

运行差异(x)

计算数据块中相邻行的值之间的差异。
对于第一行返回0,并为每个后续行返回与前一行的差异。

函数的结果取决于受影响的Block和Block中的数据顺序。
如果使用ORDER BY创建子查询并从子查询外部调用该函数,则可以获得预期结果。

示例:

  1. SELECT
  2. EventID,
  3. EventTime,
  4. runningDifference(EventTime) AS delta
  5. FROM
  6. (
  7. SELECT
  8. EventID,
  9. EventTime
  10. FROM events
  11. WHERE EventDate = '2016-11-24'
  12. ORDER BY EventTime ASC
  13. LIMIT 5
  14. )
  1. ┌─EventID─┬───────────EventTime─┬─delta─┐
  2. 1106 2016-11-24 00:00:04 0
  3. 1107 2016-11-24 00:00:05 1
  4. 1108 2016-11-24 00:00:05 0
  5. 1109 2016-11-24 00:00:09 4
  6. 1110 2016-11-24 00:00:10 1
  7. └─────────┴─────────────────────┴───────┘

运行差异启动与第一值

运行差异相同,区别在于第一行返回第一行的值,后续每个后续行返回与上一行的差值。

MACNumToString(num)

接受一个UInt64类型的数字。 将其解释为big endian的MAC地址。 返回包含相应MAC地址的字符串,格式为AA:BB:CC:DD:EE:FF(以冒号分隔的十六进制形式的数字)。

MACStringToNum(s)

与MACNumToString相反。 如果MAC地址格式无效,则返回0。

MACStringToOUI(s)

接受格式为AA:BB:CC:DD:EE:FF(十六进制形式的冒号分隔数字)的MAC地址。 返回前三个八位字节作为UInt64编号。 如果MAC地址格式无效,则返回0。

getSizeOfEnumType

返回枚举中的枚举数量。

  1. getSizeOfEnumType(value)

参数:

  • valueEnum类型的值。

返回值

  • Enum的枚举数量。
  • 如果类型不是Enum,则抛出异常。

示例

  1. SELECT getSizeOfEnumType( CAST('a' AS Enum8('a' = 1, 'b' = 2) ) ) AS x
  2. ┌─x─┐
  3. 2
  4. └───┘

toColumnTypeName

返回在RAM中列的数据类型的名称。

  1. toColumnTypeName(value)

参数:

  • value — 任何类型的值。

返回值

  • 一个字符串,其内容是value在RAM中的类型名称。

toTypeName ' 与 ' toColumnTypeName的区别示例

  1. :) select toTypeName(cast('2018-01-01 01:02:03' AS DateTime))
  2. SELECT toTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))
  3. ┌─toTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
  4. DateTime
  5. └─────────────────────────────────────────────────────┘
  6. 1 rows in set. Elapsed: 0.008 sec.
  7. :) select toColumnTypeName(cast('2018-01-01 01:02:03' AS DateTime))
  8. SELECT toColumnTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))
  9. ┌─toColumnTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
  10. Const(UInt32)
  11. └───────────────────────────────────────────────────────────┘

该示例显示DateTime数据类型作为Const(UInt32)存储在内存中。

dumpColumnStructure

输出在RAM中的数据结果的详细信息。

  1. dumpColumnStructure(value)

参数:

  • value — 任何类型的值.

返回值

  • 一个字符串,其内容是value在RAM中的数据结构的详细描述。

示例

  1. SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))
  2. ┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
  3. DateTime, Const(size = 1, UInt32(size = 1))
  4. └──────────────────────────────────────────────────────────────┘

defaultValueOfArgumentType

输出数据类型的默认值。

不包括用户设置的自定义列的默认值。

  1. defaultValueOfArgumentType(expression)

参数:

  • expression — 任意类型的值或导致任意类型值的表达式。

返回值

  • 数值类型返回0
  • 字符串类型返回空的字符串。
  • 可为空类型返回ᴺᵁᴸᴸ

示例

  1. :) SELECT defaultValueOfArgumentType( CAST(1 AS Int8) )
  2. SELECT defaultValueOfArgumentType(CAST(1, 'Int8'))
  3. ┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐
  4. 0
  5. └─────────────────────────────────────────────┘
  6. 1 rows in set. Elapsed: 0.002 sec.
  7. :) SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) )
  8. SELECT defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))
  9. ┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐
  10. ᴺᵁᴸᴸ
  11. └───────────────────────────────────────────────────────┘
  12. 1 rows in set. Elapsed: 0.002 sec.

indexHint

输出符合索引选择范围内的所有数据,同时不实用参数中的表达式进行过滤。

传递给函数的表达式参数将不会被计算,但ClickHouse使用参数中的表达式进行索引过滤。

返回值

  • 1。

示例

这是一个包含ontime测试数据集的测试表。

  1. SELECT count() FROM ontime
  2. ┌─count()─┐
  3. 4276457
  4. └─────────┘

该表使用(FlightDate, (Year, FlightDate))作为索引。

对该表进行如下的查询:

  1. :) SELECT FlightDate AS k, count() FROM ontime GROUP BY k ORDER BY k
  2. SELECT
  3. FlightDate AS k,
  4. count()
  5. FROM ontime
  6. GROUP BY k
  7. ORDER BY k ASC
  8. ┌──────────k─┬─count()─┐
  9. 2017-01-01 13970
  10. 2017-01-02 15882
  11. ........................
  12. 2017-09-28 16411
  13. 2017-09-29 16384
  14. 2017-09-30 12520
  15. └────────────┴─────────┘
  16. 273 rows in set. Elapsed: 0.072 sec. Processed 4.28 million rows, 8.55 MB (59.00 million rows/s., 118.01 MB/s.)

在这个查询中,由于没有使用索引,所以ClickHouse将处理整个表的所有数据(Processed 4.28 million rows)。使用下面的查询尝试使用索引进行查询:

  1. :) SELECT FlightDate AS k, count() FROM ontime WHERE k = '2017-09-15' GROUP BY k ORDER BY k
  2. SELECT
  3. FlightDate AS k,
  4. count()
  5. FROM ontime
  6. WHERE k = '2017-09-15'
  7. GROUP BY k
  8. ORDER BY k ASC
  9. ┌──────────k─┬─count()─┐
  10. 2017-09-15 16428
  11. └────────────┴─────────┘
  12. 1 rows in set. Elapsed: 0.014 sec. Processed 32.74 thousand rows, 65.49 KB (2.31 million rows/s., 4.63 MB/s.)

在最后一行的显示中,通过索引ClickHouse处理的行数明显减少(Processed 32.74 thousand rows)。

现在将表达式k = '2017-09-15'传递给indexHint函数:

  1. :) SELECT FlightDate AS k, count() FROM ontime WHERE indexHint(k = '2017-09-15') GROUP BY k ORDER BY k
  2. SELECT
  3. FlightDate AS k,
  4. count()
  5. FROM ontime
  6. WHERE indexHint(k = '2017-09-15')
  7. GROUP BY k
  8. ORDER BY k ASC
  9. ┌──────────k─┬─count()─┐
  10. 2017-09-14 7071
  11. 2017-09-15 16428
  12. 2017-09-16 1077
  13. 2017-09-30 8167
  14. └────────────┴─────────┘
  15. 4 rows in set. Elapsed: 0.004 sec. Processed 32.74 thousand rows, 65.49 KB (8.97 million rows/s., 17.94 MB/s.)

对于这个请求,根据ClickHouse显示ClickHouse与上一次相同的方式应用了索引(Processed 32.74 thousand rows)。但是,最终返回的结果集中并没有根据k = '2017-09-15'表达式进行过滤结果。

由于ClickHouse中使用稀疏索引,因此在读取范围时(本示例中为相邻日期),”额外”的数据将包含在索引结果中。使用indexHint函数可以查看到它们。

复制

使用单个值填充一个数组。

用于arrayJoin的内部实现。

  1. replicate(x, arr)

参数:

  • arr — 原始数组。 ClickHouse创建一个与原始数据长度相同的新数组,并用值x填充它。
  • x — 生成的数组将被填充的值。

输出

  • 一个被x填充的数组。

示例

  1. SELECT replicate(1, ['a', 'b', 'c'])
  2. ┌─replicate(1, ['a', 'b', 'c'])─┐
  3. [1,1,1]
  4. └───────────────────────────────┘

文件系统可用

返回磁盘的剩余空间信息(以字节为单位)。使用配置文件中的path配置评估此信息。

文件系统容量

返回磁盘的容量信息,以字节为单位。使用配置文件中的path配置评估此信息。

最后聚会

获取聚合函数的状态。返回聚合结果(最终状态)。

跑累积

获取聚合函数的状态并返回其具体的值。这是从第一行到当前行的所有行累计的结果。

例如,获取聚合函数的状态(示例runningAccumulate(uniqState(UserID))),对于数据块的每一行,返回所有先前行和当前行的状态合并后的聚合函数的结果。
因此,函数的结果取决于分区中数据块的顺序以及数据块中行的顺序。

joinGet(‘join_storage_table_name’, ‘get_column’,join_key)

使用指定的连接键从Join类型引擎的表中获取数据。

modelEvaluate(model_name, …)

使用外部模型计算。
接受模型的名称以及模型的参数。返回Float64类型的值。

throwIf(x)

如果参数不为零则抛出异常。