跳至主要内容
跳至主要内容

适用于 IPv4 和 IPv6 地址的函数

IPv4CIDRToRange

引入于: v20.1

接受带有 CIDR 前缀长度的 IPv4 地址,并将其子网的地址范围作为两个 IPv4 值的元组返回:该子网中的第一个和最后一个地址。对于 IPv6 版本,请参阅 IPv6CIDRToRange

语法

IPv4CIDRToRange(ipv4, cidr)

参数

返回值

返回一个包含两个 IPv4 地址的元组,表示子网范围。 Tuple(IPv4, IPv4)

示例

使用示例

SELECT IPv4CIDRToRange(toIPv4('192.168.5.2'), 16);
┌─IPv4CIDRToRange(toIPv4('192.168.5.2'), 16)─┐
│ ('192.168.0.0','192.168.255.255')          │
└────────────────────────────────────────────┘

IPv4NumToString

引入于:v1.1

将 32 位整数转换为其 IPv4 地址字符串表示形式,采用点分十进制格式 (A.B.C.D 格式)。使用大端字节序解释输入。

语法

IPv4NumToString(num)

别名: INET_NTOA

参数

  • num — 作为 UInt32 数字的 IPv4 地址。 UInt32

返回值

返回表示 MAC 地址的数字,或者如果格式无效则返回 0String

示例

使用示例

IPv4NumToString(3232235521)
192.168.0.1

IPv4NumToStringClassC

引入于:v1.1

将 32 位整数转换为其 IPv4 地址字符串表示形式,采用点分十进制格式 (A.B.C.D 格式),类似于 IPv4NumToString,但使用 xxx 代替最后一个八位字节。

语法

IPv4NumToStringClassC(num)

参数

  • num — 作为 UInt32 数字的 IPv4 地址。 UInt32

返回值

返回将 xxx 替换为最后一个八位字节的 IPv4 地址字符串。 String

示例

带有聚合的基本示例

SELECT
    IPv4NumToStringClassC(ClientIP) AS k,
    count() AS c
FROM test.hits
GROUP BY k
ORDER BY c DESC
LIMIT 10
┌─k──────────────┬─────c─┐
│ 83.149.9.xxx   │ 26238 │
│ 217.118.81.xxx │ 26074 │
│ 213.87.129.xxx │ 25481 │
│ 83.149.8.xxx   │ 24984 │
│ 217.118.83.xxx │ 22797 │
│ 78.25.120.xxx  │ 22354 │
│ 213.87.131.xxx │ 21285 │
│ 78.25.121.xxx  │ 20887 │
│ 188.162.65.xxx │ 19694 │
│ 83.149.48.xxx  │ 17406 │
└────────────────┴───────┘

IPv4StringToNum

引入于:v1.1

将点分十进制格式 (A.B.C.D 格式) 中的 IPv4 地址字符串转换为其对应的 32 位整数表示形式。(IPv4NumToString 的反向操作)。如果 IPv4 地址的格式无效,则会抛出异常。

语法

IPv4StringToNum(string)

别名: INET_ATON

参数

  • string — IPv4 地址字符串。 String

返回值

返回 IPv4 地址。 UInt32

示例

使用示例

IPv4StringToNum('192.168.0.1')
3232235521

IPv4StringToNumOrDefault

引入于:v22.3

将点分十进制格式 (A.B.C.D 格式) 中的 IPv4 地址字符串转换为其对应的 32 位整数表示形式,但如果 IPv4 地址的格式无效,则返回 0

语法

IPv4StringToNumOrDefault(string)

参数

  • string — IPv4 地址字符串。 String

返回值

返回 IPv4 地址,如果无效则返回 0UInt32

示例

带有无效地址的示例

SELECT
    IPv4StringToNumOrDefault('127.0.0.1') AS valid,
    IPv4StringToNumOrDefault('invalid') AS invalid;
┌──────valid─┬─invalid─┐
│ 2130706433 │       0 │
└────────────┴─────────┘

IPv4StringToNumOrNull

引入于:v22.3

将 32 位整数转换为其 IPv4 地址字符串表示形式,采用点分十进制格式 (A.B.C.D 格式),但如果 IPv4 地址的格式无效,则返回 NULL

语法

IPv4StringToNumOrNull(string)

参数

  • string — IPv4 地址字符串。 String

返回值

返回 IPv4 地址,如果无效则返回 NULLNullable(UInt32)

示例

带有无效地址的示例

SELECT
IPv4StringToNumOrNull('127.0.0.1') AS valid,
IPv4StringToNumOrNull('invalid') AS invalid;
┌──────valid─┬─invalid─┐
│ 2130706433 │    ᴺᵁᴸᴸ │
└────────────┴─────────┘

IPv4ToIPv6

引入于:v1.1

将 (大端) 32 位数字解释为 IPv4 地址,然后将其解释为相应的 IPv6 地址,格式为 FixedString(16)

语法

IPv4ToIPv6(x)

参数

返回值

返回二进制格式的 IPv6 地址。 FixedString(16)

示例

使用示例

SELECT IPv6NumToString(IPv4ToIPv6(IPv4StringToNum('192.168.0.1'))) AS addr;
┌─addr───────────────┐
│ ::ffff:192.168.0.1 │
└────────────────────┘

IPv6CIDRToRange

引入于: v20.1

接受带有 CIDR 前缀长度的 IPv6 地址,并将其子网的地址范围作为两个 IPv6 值的元组返回:该子网中的最低和最高地址。对于 IPv4 版本,请参阅 IPv4CIDRToRange

语法

IPv6CIDRToRange(ipv6, cidr)

参数

返回值

返回一个包含两个 IPv6 地址的元组,表示子网范围。 Tuple(IPv6, IPv6)

示例

使用示例

SELECT IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32);
┌─IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32)─┐
│ ('2001:db8::','2001:db8:ffff:ffff:ffff:ffff:ffff:ffff')                │
└────────────────────────────────────────────────────────────────────────┘

IPv6NumToString

引入于:v1.1

将二进制格式 (FixedString(16)) 的 IPv6 地址转换为其标准文本表示形式。IPv4 映射的 IPv6 地址以 ::ffff:111.222.33.44 格式显示。

语法

IPv6NumToString(x)

别名: INET6_NTOA

参数

返回值

返回文本格式的 IPv6 地址字符串。 String

示例

使用示例

SELECT IPv6NumToString(toFixedString(unhex('2A0206B8000000000000000000000011'), 16)) AS addr;
┌─addr─────────┐
│ 2a02:6b8::11 │
└──────────────┘

带有点击分析的 IPv6

SELECT
    IPv6NumToString(ClientIP6 AS k),
    count() AS c
FROM hits_all
WHERE EventDate = today() AND substring(ClientIP6, 1, 12) != unhex('00000000000000000000FFFF')
GROUP BY k
ORDER BY c DESC
LIMIT 10
┌─IPv6NumToString(ClientIP6)──────────────┬─────c─┐
│ 2a02:2168:aaa:bbbb::2                   │ 24695 │
│ 2a02:2698:abcd:abcd:abcd:abcd:8888:5555 │ 22408 │
│ 2a02:6b8:0:fff::ff                      │ 16389 │
│ 2a01:4f8:111:6666::2                    │ 16016 │
│ 2a02:2168:888:222::1                    │ 15896 │
│ 2a01:7e00::ffff:ffff:ffff:222           │ 14774 │
│ 2a02:8109:eee:ee:eeee:eeee:eeee:eeee    │ 14443 │
│ 2a02:810b:8888:888:8888:8888:8888:8888  │ 14345 │
│ 2a02:6b8:0:444:4444:4444:4444:4444      │ 14279 │
│ 2a01:7e00::ffff:ffff:ffff:ffff          │ 13880 │
└─────────────────────────────────────────┴───────┘

IPv4 映射的 IPv6 地址

SELECT
    IPv6NumToString(ClientIP6 AS k),
    count() AS c
FROM hits_all
WHERE EventDate = today()
GROUP BY k
ORDER BY c DESC
LIMIT 10
┌─IPv6NumToString(ClientIP6)─┬──────c─┐
│ ::ffff:94.26.111.111       │ 747440 │
│ ::ffff:37.143.222.4        │ 529483 │
│ ::ffff:5.166.111.99        │ 317707 │
│ ::ffff:46.38.11.77         │ 263086 │
│ ::ffff:79.105.111.111      │ 186611 │
│ ::ffff:93.92.111.88        │ 176773 │
│ ::ffff:84.53.111.33        │ 158709 │
│ ::ffff:217.118.11.22       │ 154004 │
│ ::ffff:217.118.11.33       │ 148449 │
│ ::ffff:217.118.11.44       │ 148243 │
└────────────────────────────┴────────┘

IPv6StringToNum

引入于:v1.1

将 IPv6 地址从其标准文本表示形式转换为二进制格式 (FixedString(16))。接受格式为 ::ffff:111.222.33.44. 的 IPv4 映射的 IPv6 地址。如果 IPv6 地址的格式无效,则会抛出异常。

如果输入字符串包含有效的 IPv4 地址,则返回其 IPv6 等效地址。十六进制可以是大写或小写。

语法

IPv6StringToNum(string)

别名: INET6_ATON

参数

  • string — IPv6 地址字符串。 String

返回值

返回二进制格式的 IPv6 地址。 FixedString(16)

示例

基本示例

SELECT addr, cutIPv6(IPv6StringToNum(addr), 0, 0) FROM (SELECT ['notaddress', '127.0.0.1', '1111::ffff'] AS addr) ARRAY JOIN addr;
┌─addr───────┬─cutIPv6(IPv6StringToNum(addr), 0, 0)─┐
│ notaddress │ ::                                   │
│ 127.0.0.1  │ ::ffff:127.0.0.1                     │
│ 1111::ffff │ 1111::ffff                           │
└────────────┴──────────────────────────────────────┘

IPv6StringToNumOrDefault

引入于:v22.3

将 IPv6 地址从其标准文本表示形式转换为二进制格式 (FixedString(16))。接受格式为 ::ffff:111.222.33.44. 的 IPv4 映射的 IPv6 地址。如果 IPv6 地址的格式无效,则返回默认值 ::

语法

IPv6StringToNumOrDefault(string)

参数

  • string — IPv6 地址字符串。 String

返回值

二进制格式的 IPv6 地址,如果无效则为零填充的 FixedString(16)。 FixedString(16)

示例

带有无效地址的基本示例

SELECT
    IPv6NumToString(IPv6StringToNumOrDefault('2001:db8::1')) AS valid,
    IPv6NumToString(IPv6StringToNumOrDefault('invalid')) AS invalid;
┌─valid───────┬─invalid─┐
│ 2001:db8::1 │ ::      │
└─────────────┴─────────┘

IPv6StringToNumOrNull

引入于:v22.3

将 IPv6 地址从其标准文本表示形式转换为二进制格式 (FixedString(16))。接受格式为 ::ffff:111.222.33.44. 的 IPv4 映射的 IPv6 地址。如果 IPv6 地址的格式无效,则返回 NULL

语法

IPv6StringToNumOrNull(string)

参数

  • string — IPv6 地址字符串。 String

返回值

返回二进制格式的 IPv6 地址,如果无效则返回 NULLNullable(FixedString(16))

示例

带有无效地址的基本示例

SELECT
    IPv6NumToString(IPv6StringToNumOrNull('2001:db8::1')) AS valid,
    IPv6StringToNumOrNull('invalid') AS invalid;
┌─valid───────┬─invalid─┐
│ 2001:db8::1 │    ᴺᵁᴸᴸ │
└─────────────┴─────────┘

cutIPv6

引入于:v1.1

接受包含二进制格式 IPv6 地址的 FixedString(16) 值。返回一个字符串,其中包含以文本格式删除的指定数量字节的地址。

语法

cutIPv6(x, bytesToCutForIPv6, bytesToCutForIPv4)

参数

  • x — 二进制格式的 IPv6 地址。 FixedString(16)IPv6
  • bytesToCutForIPv6 — 要为 IPv6 剪切的字节数。 UInt8
  • bytesToCutForIPv4 — 要为 IPv4 剪切的字节数。 UInt8

返回值

返回一个包含文本格式 IPv6 地址的字符串,其中删除了指定的字节。 String

示例

使用示例

WITH
    IPv6StringToNum('2001:0DB8:AC10:FE01:FEED:BABE:CAFE:F00D') AS ipv6,
    IPv4ToIPv6(IPv4StringToNum('192.168.0.1')) AS ipv4
SELECT
    cutIPv6(ipv6, 2, 0),
    cutIPv6(ipv4, 0, 2)
┌─cutIPv6(ipv6, 2, 0)─────────────────┬─cutIPv6(ipv4, 0, 2)─┐
│ 2001:db8:ac10:fe01:feed:babe:cafe:0 │ ::ffff:192.168.0.0  │
└─────────────────────────────────────┴─────────────────────┘

isIPAddressInRange

引入于:v21.4

确定 IP 地址是否包含在 无类别域间路由 (CIDR) 表示法中表示的网络中。

此函数接受表示为字符串的 IPv4 和 IPv6 地址(和网络)。如果地址和 CIDR 的 IP 版本不匹配,则返回 0

语法

isIPAddressInRange(address, prefix)

参数

  • address — IPv4 或 IPv6 地址。 String
  • prefix — CIDR 中的 IPv4 或 IPv6 网络前缀。 String

返回值

如果地址和 CIDR 的 IP 版本匹配,则返回 1,否则返回 0UInt8

示例

IPv4 地址在范围内

SELECT isIPAddressInRange('127.0.0.1', '127.0.0.0/8')
1

IPv4 地址不在范围内

SELECT isIPAddressInRange('127.0.0.1', 'ffff::/16')
0

IPv6 地址不在范围内

SELECT isIPAddressInRange('::ffff:192.168.0.1', '::ffff:192.168.0.4/128')
0

isIPv4String

引入于:v21.1

确定输入字符串是否为 IPv4 地址。对于 IPv6 版本,请参阅 isIPv6String

语法

isIPv4String(string)

参数

  • string — 要检查的 IP 地址字符串。 String

返回值

如果 string 是 IPv4 地址,则返回 1,否则返回 0UInt8

示例

使用示例

SELECT addr, isIPv4String(addr)
FROM(
SELECT ['0.0.0.0', '127.0.0.1', '::ffff:127.0.0.1'] AS addr
)
ARRAY JOIN addr;
┌─addr─────────────┬─isIPv4String(addr)─┐
│ 0.0.0.0          │                  1 │
│ 127.0.0.1        │                  1 │
│ ::ffff:127.0.0.1 │                  0 │
└──────────────────┴────────────────────┘

isIPv6String

引入于:v21.1

确定输入字符串是否为 IPv6 地址。对于 IPv4 版本,请参阅 isIPv4String

语法

isIPv6String(string)

参数

  • string — 要检查的 IP 地址字符串。 String

返回值

如果 string 是 IPv6 地址,则返回 1,否则返回 0UInt8

示例

使用示例

SELECT addr, isIPv6String(addr)
FROM(SELECT ['::', '1111::ffff', '::ffff:127.0.0.1', '127.0.0.1'] AS addr)
ARRAY JOIN addr;
┌─addr─────────────┬─isIPv6String(addr)─┐
│ ::               │                  1 │
│ 1111::ffff       │                  1 │
│ ::ffff:127.0.0.1 │                  1 │
│ 127.0.0.1        │                  0 │
└──────────────────┴────────────────────┘

toIPv4

引入于: v20.1

将字符串或 UInt32 形式的 IPv4 地址转换为 IPv4 类型。它类似于 IPv4StringToNumIPv4NumToString 函数,但它支持字符串和无符号整数数据类型作为输入参数。

语法

toIPv4(x)

参数

返回值

返回 IPv4 地址。 IPv4

示例

使用示例

SELECT toIPv4('171.225.130.45');
┌─toIPv4('171.225.130.45')─┐
│ 171.225.130.45           │
└──────────────────────────┘

与 IPv4StringToNum 和 IPv4NumToString 函数的比较。

WITH
    '171.225.130.45' AS IPv4_string
SELECT
    hex(IPv4StringToNum(IPv4_string)),
    hex(toIPv4(IPv4_string))
┌─hex(IPv4StringToNum(IPv4_string))─┬─hex(toIPv4(IPv4_string))─┐
│ ABE1822D                          │ ABE1822D                 │
└───────────────────────────────────┴──────────────────────────┘

从整数转换

SELECT toIPv4(2130706433);
┌─toIPv4(2130706433)─┐
│ 127.0.0.1          │
└────────────────────┘

toIPv4OrDefault

引入于:v22.3

将字符串或 UInt32 形式的 IPv4 地址转换为 IPv4 类型。如果 IPv4 地址的格式无效,则返回 0.0.0.0 (0 IPv4),或者提供的 IPv4 默认值。

语法

toIPv4OrDefault(string[, default])

参数

  • string — 要转换的 IP 地址字符串。 String
  • default — 可选。如果字符串是无效的 IPv4 地址,则返回的值。 IPv4

返回值

返回转换为当前 IPv4 地址的字符串,或者如果转换失败则返回默认值。 IPv4

示例

有效的和无效的 IPv4 字符串

WITH
    '192.168.1.1' AS valid_IPv4_string,
    '999.999.999.999' AS invalid_IPv4_string,
    'not_an_ip' AS malformed_string
SELECT
    toIPv4OrDefault(valid_IPv4_string) AS valid,
    toIPv4OrDefault(invalid_IPv4_string) AS default_value,
    toIPv4OrDefault(malformed_string, toIPv4('8.8.8.8')) AS provided_default;
┌─valid─────────┬─default_value─┬─provided_default─┐
│ 192.168.1.1   │ 0.0.0.0       │ 8.8.8.8          │
└───────────────┴───────────────┴──────────────────┘

toIPv4OrNull

引入于:v22.3

将输入值转换为 IPv4 类型的值,但在发生错误时返回 NULL。类似于 toIPv4,但在转换错误时返回 NULL 而不是抛出异常。

支持的参数

  • 点分十进制表示法的 IPv4 地址字符串。
  • IPv4 地址的整数表示。

不支持的参数(返回 NULL

  • 无效的 IP 地址格式。
  • IPv6 地址。
  • 超出范围的值。
  • 格式错误的地址。

语法

toIPv4OrNull(x)

参数

  • x — IPv4 地址的字符串或整数表示。 StringInteger

返回值

如果成功,则返回 IPv4 地址,否则返回 NULLIPv4NULL

示例

使用示例

SELECT
    toIPv4OrNull('192.168.1.1') AS valid_ip,
    toIPv4OrNull('invalid.ip') AS invalid_ip
┌─valid_ip────┬─invalid_ip─┐
│ 192.168.1.1 │       ᴺᵁᴸᴸ │
└─────────────┴────────────┘

toIPv4OrZero

引入版本: v23.1

将输入值转换为 IPv4 类型的值,但在发生错误时返回零 IPv4 地址。类似于 toIPv4,但在转换错误时返回零 IPv4 地址 (0.0.0.0),而不是抛出异常。

支持的参数

  • 点分十进制表示法的 IPv4 地址字符串。
  • IPv4 地址的整数表示。

不支持的参数(返回零 IPv4)

  • 无效的 IP 地址格式。
  • IPv6 地址。
  • 超出范围的值。

语法

toIPv4OrZero(x)

参数

  • x — IPv4 地址的字符串或整数表示。 StringInteger

返回值

如果成功,则返回 IPv4 地址,否则返回零 IPv4 地址 (0.0.0.0)。 IPv4

示例

使用示例

SELECT
    toIPv4OrZero('192.168.1.1') AS valid_ip,
    toIPv4OrZero('invalid.ip') AS invalid_ip
┌─valid_ip────┬─invalid_ip─┐
│ 192.168.1.1 │ 0.0.0.0    │
└─────────────┴────────────┘

toIPv6

引入于: v20.1

将 IPv6 地址的字符串或 UInt128 形式转换为 IPv6 类型。对于字符串,如果 IPv6 地址的格式无效,则返回一个空值。类似于 IPv6StringToNumIPv6NumToString 函数,这些函数将 IPv6 地址转换为二进制格式(即 FixedString(16))。

如果输入字符串包含有效的 IPv4 地址,则返回 IPv4 地址的 IPv6 等效地址。

语法

toIPv6(x)

参数

返回值

返回 IPv6 地址。 IPv6

示例

使用示例

WITH '2001:438:ffff::407d:1bc1' AS IPv6_string
SELECT
    hex(IPv6StringToNum(IPv6_string)),
    hex(toIPv6(IPv6_string));
┌─hex(IPv6StringToNum(IPv6_string))─┬─hex(toIPv6(IPv6_string))─────────┐
│ 20010438FFFF000000000000407D1BC1  │ 20010438FFFF000000000000407D1BC1 │
└───────────────────────────────────┴──────────────────────────────────┘

IPv4 到 IPv6 的映射

SELECT toIPv6('127.0.0.1');
┌─toIPv6('127.0.0.1')─┐
│ ::ffff:127.0.0.1    │
└─────────────────────┘

toIPv6OrDefault

引入于:v22.3

将 IPv6 地址的字符串或 UInt128 形式转换为 IPv6 类型。如果 IPv6 地址的格式无效,则返回 :: (0 IPv6) 或提供的 IPv6 默认值。

语法

toIPv6OrDefault(string[, default])

参数

  • string — 要转换的 IP 地址字符串。 - default — 可选。如果字符串格式无效,则返回的值。

返回值

返回 IPv6 地址,否则如果参数 string 格式无效,则返回 :: 或提供的可选默认值。 IPv6

示例

有效的和无效的 IPv6 字符串

WITH
    '2001:0db8:85a3:0000:0000:8a2e:0370:7334' AS valid_IPv6_string,
    '2001:0db8:85a3::8a2e:370g:7334' AS invalid_IPv6_string,
    'not_an_ipv6' AS malformed_string
SELECT
    toIPv6OrDefault(valid_IPv6_string) AS valid,
    toIPv6OrDefault(invalid_IPv6_string) AS default_value,
    toIPv6OrDefault(malformed_string, toIPv6('::1')) AS provided_default;
┌─valid──────────────────────────────────┬─default_value─┬─provided_default─┐
│ 2001:db8:85a3::8a2e:370:7334           │ ::            │ ::1              │
└────────────────────────────────────────┴───────────────┴──────────────────┘

toIPv6OrNull

引入于:v22.3

将输入值转换为 IPv6 类型的值,但在发生错误时返回 NULL。类似于 toIPv6,但在转换错误时返回 NULL,而不是抛出异常。

支持的参数

  • IPv6 地址的标准表示形式。
  • 转换为 IPv4 映射 IPv6 的 IPv4 地址的字符串表示形式。
  • IPv6 地址的二进制表示形式。

不支持的参数(返回 NULL

  • 无效的 IP 地址格式。
  • 格式错误的 IPv6 地址。
  • 超出范围的值。
  • 无效的表示法。

语法

toIPv6OrNull(x)

参数

  • x — IPv6 或 IPv4 地址的字符串表示形式。 String

返回值

如果成功,则返回 IPv6 地址,否则返回 NULLIPv6NULL

示例

使用示例

SELECT
    toIPv6OrNull('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6,
    toIPv6OrNull('invalid::ip') AS invalid_ipv6
┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐
│ 2001:db8:85a3::8a2e:370:7334        │         ᴺᵁᴸᴸ │
└─────────────────────────────────────┴──────────────┘

toIPv6OrZero

引入版本: v23.1

将输入值转换为 IPv6 类型的值,但在发生错误时返回零 IPv6 地址。类似于 toIPv6,但在转换错误时返回零 IPv6 地址 (::),而不是抛出异常。

支持的参数

  • IPv6 地址的标准表示形式。
  • 转换为 IPv4 映射 IPv6 的 IPv4 地址的字符串表示形式。
  • IPv6 地址的二进制表示形式。

不支持的参数(返回零 IPv6)

  • 无效的 IP 地址格式。
  • 格式错误的 IPv6 地址。
  • 超出范围的值。

语法

toIPv6OrZero(x)

参数

  • x — IPv6 或 IPv4 地址的字符串表示形式。 String

返回值

如果成功,则返回 IPv6 地址,否则返回零 IPv6 地址 (::)。 IPv6

示例

使用示例

SELECT
    toIPv6OrZero('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6,
    toIPv6OrZero('invalid::ip') AS invalid_ipv6
┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐
│ 2001:db8:85a3::8a2e:370:7334        │ ::           │
└─────────────────────────────────────┴──────────────┘
    © . This site is unofficial and not affiliated with ClickHouse, Inc.