【问题标题】:Clickhouse; Issues listing ip addresses where the column has multiple ip addresses点击屋;列出具有多个 IP 地址的列的 IP 地址的问题
【发布时间】: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 类型中。

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

【问题讨论】:

    标签: sql sql-like clickhouse


    【解决方案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 │
    └─────────┘
    */
    

    【讨论】:

      猜你喜欢
      • 2016-12-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      相关资源
      最近更新 更多