Сравнение двух массивов в строках ClickHouse - PullRequest
0 голосов
/ 24 сентября 2018

Есть ли варианты для сравнения двух массивов в ClickHouse?

Есть два столбца colA и colB, каждый из которых содержит массив.

Если существует какой-либо алгоритм, который сравнивает массивы в colA и colB для каждой строки в таблице ClickHouse и задает colC значение 1, если массивы равны, 0, если массивы не равны?

Например:

colA                             |  colB                            | colC
---------------------------------|----------------------------------|-----
{555,571,701,707,741,1470,4965}  |  {555,571,701,707,741,1470,4965} |1
{555,571,701,707,741,1470,4965}  |  {555,571,701,707,741,1470,4964} |0

1 Ответ

0 голосов
/ 24 сентября 2018

Я задавал тот же вопрос на ClickHouse Google Group и получил ответ от Дениса Журавлева:

В последней версии CH 18.1.0, 2018-07-23 (# 2026) :

select [111,222] A,  [111,222] B, [111,333] C, A=B ab, A=C ac

приводит к

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

До 18.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 │
└────┴────┘
...