点击屋;列出具有多个 IP 地址的列的 IP 地址的问题

Posted

技术标签:

【中文标题】点击屋;列出具有多个 IP 地址的列的 IP 地址的问题【英文标题】:Clickhouse; Issues listing ip addresses where the column has multiple ip addresses 【发布时间】:2021-08-24 21:14:39 【问题描述】:

我正在尝试在 Clickhouse 表中获取我们所有用户的 IPv4 地址的列表。由于我们的一些用户有多个用逗号分隔的 IPv4 地址,因此我创建了以下查询:

SELECT 
    IF(ip LIKE '%,%', arrayElement(splitByChar(',', ip), 1), ip) AS ip
FROM users

但它给了我这个错误:嵌套类型 Array(String) 不能在 Nullable 类型中。

这样可以只选择字符串的一部分吗?

【问题讨论】:

【参考方案1】:

考虑使用assumeNotNull-function:

SELECT ips IS NULL ? NULL : IF(ips LIKE '%,%', splitByChar(',', assumeNotNull(ips))[1], ips) AS ip
FROM
(
    /* Emulate the test dataset. */
    SELECT arrayJoin([NULL, '', '1.1.1.1', '2.2.2.2,3.3.3.3']) AS ips
)

/*
┌─ip──────┐
│ ᴺᵁᴸᴸ    │
│         │
│ 1.1.1.1 │
│ 2.2.2.2 │
└─────────┘
*/

SELECT ips IS NULL ? NULL : splitByChar(',', assumeNotNull(ips))[1] AS ip
FROM
(
    SELECT arrayJoin([NULL, '', '1.1.1.1', '2.2.2.2,3.3.3.3']) AS ips
)

/*
┌─ip──────┐
│ ᴺᵁᴸᴸ    │
│         │
│ 1.1.1.1 │
│ 2.2.2.2 │
└─────────┘
*/

【讨论】:

以上是关于点击屋;列出具有多个 IP 地址的列的 IP 地址的问题的主要内容,如果未能解决你的问题,请参考以下文章

点击屋。如何创建一个保留另一列的最后一个值的列?

列出子网中的所有 IP 地址

一个网卡设置多个IP地址的方法是啥?

一个网卡设置多个IP地址的方法是啥?

ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址

UDP 客户端未收到来自具有多个 IP 地址的服务器的回复