You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ClickHouse字典中查询包含指定IP的CIDR网段?

解决ClickHouse IP_TRIE字典的IP网段匹配问题

针对IP_TRIE布局的字典,不能使用普通的等值查询匹配包含目标IP的网段,需要利用ClickHouse为该布局提供的专属查询逻辑。

方法一:直接查询字典并传入IP参数

使用tuple()包装目标IP作为查询参数,ClickHouse会自动匹配包含该IP的最精确网段记录:

SELECT * FROM dictionary('reputation_rbl_db', tuple('1.10.15.55'))

方法二:使用dictGet系列函数获取指定字段

如果只需要部分字段,可以用dictGet逐个获取,适合嵌入复杂查询场景:

SELECT 
    dictGet('reputation_rbl_db', 'network', tuple('1.10.15.55')) AS network,
    dictGet('reputation_rbl_db', 'source', tuple('1.10.15.55')) AS source,
    dictGet('reputation_rbl_db', 'category', tuple('1.10.15.55')) AS category,
    dictGet('reputation_rbl_db', 'asn', tuple('1.10.15.55')) AS asn,
    dictGet('reputation_rbl_db', 'country', tuple('1.10.15.55')) AS country

方法三:处理无匹配的情况(可选)

若担心目标IP没有对应网段记录,可使用dictGetOrDefault设置默认值:

SELECT 
    dictGetOrDefault('reputation_rbl_db', 'network', tuple('1.10.15.55'), '') AS network,
    dictGetOrDefault('reputation_rbl_db', 'source', tuple('1.10.15.55'), '') AS source,
    dictGetOrDefault('reputation_rbl_db', 'category', tuple('1.10.15.55'), '') AS category,
    dictGetOrDefault('reputation_rbl_db', 'asn', tuple('1.10.15.55'), 0) AS asn,
    dictGetOrDefault('reputation_rbl_db', 'country', tuple('1.10.15.55'), '') AS country

原查询无效的原因

你之前使用的SELECT * FROM dictionary('reputation_rbl_db') where network = '1.10.15.55/32'是等值匹配网段字符串,但字典中不存在1.10.15.55/32这条记录,且IP_TRIE布局的字典不会自动解析该字符串为IP去匹配网段,因此无法得到结果。

内容的提问来源于stack exchange,提问作者maxid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:24:28