ClickHouse не работает DISTINCT ON

Имеется таблица my_table следующего вида:

Column1 Column2 Column3 Column4
a b c d
m x c d
m x y z

Необходимо получить все строки с уникальными значениями из Column2, т.е. должно получиться нечто подобное:

Column1 Column2 Column3 Column4
a b c d
m x c d

Пытаюсь сделать с помощью DISTINCT, однако, на запрос:

    SELECT DISTINCT ON (Column2) *
    FROM my_db.my_table

получаю ошибку:

SQL Error [62]: ClickHouse exception, code: 62, host: localhost, port: 8123; Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 54 ('.') (line 2, col 18): .my_table. Expected one of: UNION, LIMIT, WHERE, WINDOW, end of query, HAVING, GROUP BY, INTO OUTFILE, OFFSET, PREWHERE, Comma, ORDER BY, SETTINGS, FROM, FORMAT, WITH, token (version 21.7.3.14 (official build))

В качестве примера использовал https://clickhouse.com/docs/ru/sql-reference/statements/select/distinct/

Подскажите, что я делаю неправильно? А то информация об ошибке не сильно помогла.


Ответы (1 шт):

Автор решения: vladimir

DISTINCT ON добавлена, начиная с версии v21.8.

Поэтому либо

  • обновите ClickHouse
  • сэмулируйте этот запрос:
SELECT
    any(Column1),
    Column2,
    any(Column3),
    any(Column4)
FROM
(
    /* emulate the test dataset */
    SELECT
        data.1 AS Column1,
        data.2 AS Column2,
        data.3 AS Column3,
        data.4 AS Column4
    FROM
    (
        SELECT arrayJoin([('a', 'b', 'c', 'd'), ('m', 'x', 'c', 'd'), ('m', 'x', 'y', 'z')]) AS data
    )
)
GROUP BY Column2
/*
┌─any(Column1)─┬─Column2─┬─any(Column3)─┬─any(Column4)─┐
│ a            │ b       │ c            │ d            │
│ m            │ x       │ c            │ d            │
└──────────────┴─────────┴──────────────┴──────────────┘
*/
→ Ссылка