点击屋;列出具有多个 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 地址的问题的主要内容,如果未能解决你的问题,请参考以下文章