В этом релизе есть два очень полезных исправления:
- Агрегация без GROUP BY по пустому множеству.
- Исправлены случаи ошибочного удаления ненужных столбцов из подзапросов.
Первое дает нам ожидаемое поведение, если результат агрегации равен нулю.
Например, у нас есть пустая таблица:
:) CREATE TEMPORARY TABLE example(
:-] Value Int8
:-] );
CREATE TEMPORARY TABLE example
(
Value Int8
)
Ok.
0 rows in set. Elapsed: 0.001 sec.
Если мы выполним запрос COUNT(*)
к этой таблице на версии ClickHouse server старше 1.1.54362 (для примера будем брать версию 1.1.54342), то сервер вернёт нам пустой результат.
:) SELECT COUNT(*) FROM example;
SELECT COUNT(*)
FROM example
Ok.
0 rows in set. Elapsed: 0.002 sec.
Если мы выполним этот запрос на версии ClickHouse server 1.1.54362, то получим вполне ожидаемый результат.
:) SELECT COUNT(*) FROM example;
SELECT COUNT(*)
FROM example
┌─COUNT()─┐
│ 0 │
└─────────┘
1 rows in set. Elapsed: 0.007 sec.
Второе, очень важное исправление, связано с ошибочным удалением столбцов из подзапросов.
Пример:
ClickHouse client version 1.1.54362.
Connecting to 172.17.0.4:9000.
Connected to ClickHouse server version 1.1.54342.
:) SELECT sum(x) FROM (SELECT x, y FROM (SELECT number AS x, number + 1 AS y FROM system.numbers LIMIT 10) ORDER BY y LIMIT 1 BY y)
SELECT sum(x)
FROM
(
SELECT
x,
y
FROM
(
SELECT
number AS x,
number + 1 AS y
FROM system.numbers
LIMIT 10
)
ORDER BY y ASC
LIMIT 1 BY y
)
Received exception from server (version 1.1.54342):
Code: 10. DB::Exception: Received from 172.17.0.4:9000. DB::Exception: Not found column y in block. There are only columns: x.
0 rows in set. Elapsed: 0.119 sec.
При этом для исправления ситуации приходилось писать достаточно странные запросы.
Пример запроса:
ClickHouse client version 1.1.54362.
Connecting to 172.17.0.4:9000.
Connected to ClickHouse server version 1.1.54342.
:) SELECT sum(x) FROM (SELECT x, y FROM (SELECT number AS x, number + 1 AS y FROM system.numbers LIMIT 10) ORDER BY y LIMIT 1 BY y) WHERE y <> -42
SELECT sum(x)
FROM
(
SELECT
x,
y
FROM
(
SELECT
number AS x,
number + 1 AS y
FROM system.numbers
LIMIT 10
)
ORDER BY y ASC
LIMIT 1 BY y
)
WHERE y != -42 /*-- FIX--*/
┌─sum(x)─┐
│ 45 │
└────────┘
1 rows in set. Elapsed: 0.005 sec.
Начиная с версии ClickHouse server 1.1.54362 такой проблемы больше нет.
ClickHouse client version 1.1.54362.
Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.54362.
:) SELECT sum(x) FROM (SELECT x, y FROM (SELECT number AS x, number + 1 AS y FROM system.numbers LIMIT 10) ORDER BY y LIMIT 1 BY y)
SELECT sum(x)
FROM
(
SELECT
x,
y
FROM
(
SELECT
number AS x,
number + 1 AS y
FROM system.numbers
LIMIT 10
)
ORDER BY y ASC
LIMIT 1 BY y
)
┌─sum(x)─┐
│ 45 │
└────────┘
1 rows in set. Elapsed: 0.021 sec.