比较ClickHouse行中的两个数组

时间:2018-09-24 12:24:18

标签: arrays clickhouse column-oriented

是否可以在ClickHouse中比较两个数组?

有两列colAcolB,每列包含一个数组。

如果有任何算法可以比较ClickHouse表中每一行的colAcolB中的数组,并在数组相等的情况下将colC的值设置为1,则{{ 1}}如果数组不相等?

例如:

0

2 个答案:

答案 0 :(得分:1)

我在JEP问了同样的问题,并从Denis Zhuravlev那里得到了ClickHouse Google Group

在最新版本的CH 18.1.0中,2018-07-23 answer

┌─A─────────┬─B─────────┬─C─────────┬─ab─┬─ac─┐
│ [111,222] │ [111,222] │ [111,333] │  1 │  0 │
└───────────┴───────────┴───────────┴────┴────┘

结果

SELECT 
   NOT has(groupArray(A = B), 0) ab
  ,NOT has(groupArray(A = C), 0) ac
  FROM
    (
      SELECT
         [111,222] A
        ,[111,222] B
        ,[111,333] C
    )
    ARRAY JOIN
         A
        ,B
        ,C 


┌─ab─┬─ac─┐
│  1 │  0 │
└────┴────┘

在18.1.0之前,您可以使用lambda或类似的东西:

{{1}}

答案 1 :(得分:1)

我认为现在平等工作20.3.5.21

Cloud10 :) SELECT [2,1] = [1,2]

SELECT [2, 1] = [1, 2]

┌─equals([2, 1], [1, 2])─┐
│                      0 │
└────────────────────────┘

1 rows in set. Elapsed: 0.003 sec. 

Cloud10 :) SELECT [2,1] = [2,1]

SELECT [2, 1] = [2, 1]

┌─equals([2, 1], [2, 1])─┐
│                      1 │
└────────────────────────┘

1 rows in set. Elapsed: 0.003 sec.