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

在ClickHouse中匹配表数组元素并在新字段返回结果

ClickHouse 关联数组元素匹配生成结果数组

原始表结构与数据

假设目标表为your_table,结构定义如下:

CREATE TABLE your_table (
    path String,
    arrKW Array(String)
) ENGINE = MergeTree()
ORDER BY path;

表中原始数据:

patharrKW
folder/puntonet['kw1','kw2']
folder/puntonet-2.0['kw2','kw3']
folder/puntonet-4['kw2','kw4']
folder/puntonet-5['kw5','kw4']

解决方案SQL

SELECT
    t1.path,
    t1.arrKW,
    arrayFilter(
        x -> x != t1.path,
        arrayDistinct(
            arrayFlatten(groupArray(t2.path))
        )
    ) AS `Result Field`
FROM your_table t1
LEFT JOIN your_table t2
ON arrayIntersect(t1.arrKW, t2.arrKW) != []
GROUP BY t1.path, t1.arrKW
ORDER BY t1.path;

逻辑说明

  1. 自关联匹配:通过LEFT JOIN将表与自身关联,关联条件为两条记录的arrKW数组存在交集元素(arrayIntersect结果非空)。
  2. 收集匹配路径:用groupArray(t2.path)收集所有满足匹配条件的path,此时结果包含当前记录自身的path。
  3. 去重与扁平化:arrayDistinct去除重复的path(同一记录可能因多个交集元素被多次匹配),arrayFlatten确保结果为一维数组。
  4. 过滤自身路径:arrayFilter剔除与当前记录path相同的元素,得到最终符合要求的结果数组。

期望输出结果

patharrKWResult Field
folder/puntonet['kw1','kw2']['folder/puntonet-2.0','folder/puntonet-4']
folder/puntonet-2.0['kw2','kw3','kw5']['folder/puntonet','folder/puntonet-5']
folder/puntonet-4['kw2','kw4']['folder/puntonet','folder/puntonet-2.0']
folder/puntonet-5['kw5','kw4']['folder/puntonet-2.0','folder/puntonet-4']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:10:26