Clickhouse возвращает массив записей?

#clickhouse

Вопрос:

Возможно ли в click house, чтобы столбец возвращал массив объектов?

Я знаю, что groupArray может возвращать определенный столбец, однако я хочу вернуть все столбцы.

Ответ №1:

Да, ClickHouse может возвращать массив данных.

 CREATE TABLE mytable (
    dt DateTime,
    ...
    arr Array(String)
) Engine=Memory()
 

Если вы хотите вернуть все столбцы таблицы в виде массива, то все столбцы должны иметь один и тот же тип, поскольку массивы должны содержать элементы одного и того же типа. Поэтому будет действительным следующее:

 CREATE TABLE array_of_all_columns(
    a String, 
    b String
) Engine=Memory
 

Затем вы можете получить все столбцы в виде массива:

 SELECT array(*) as arr FROM array_of_all_columns;

┌─arr───────┐
│ ['A','B'] │
└───────────┘
┌─arr───────┐
│ ['C','D'] │
└───────────┘
 

В приведенном выше примере, если у вас есть 3-й столбец , который не относится к типу String , то вы получите эту ошибку:

DB::Exception: There is no supertype for types String, String, Int32 because some of them are String/FixedString and some of them are not: While processing [a, b, c].

Комментарии:

1. Спасибо! Значит, все они должны быть одного типа?

2. @YayoUK, да, все столбцы должны быть одного типа.