PostgreSQL wire protocol Geographical dictionaries Data coarsening with TTL expressions Parallel calculation of FINAL Insertion into ODBC and JDBC Cassandra dictionary source Dictionary layout for SSD Settings for data formats in dictionaries Support for Distributed over Distributed queries Query metrics from PMU GROUP BY optimization on sorted data Apache Arrow import/export MsgPack format "direct" dictionary source
EXPLAIN [AST|SYNTAX|PLAN|PIPELINE]
SELECT ...
EXPLAIN PLAN
header = 0, description = 1,
actions = 0, optimize = 1
SELECT ...
EXPLAIN PIPELINE
header = 0, graph = 1, compact = 1
SELECT ...
Доступно с версии 20.6. Разработчик — Николай Кочетов.
— для подзапросов:
WITH a AS (SELECT ...),
b AS (SELECT ...),
c AS (SELECT ...)
SELECT * FROM a, b WHERE x IN c
— глобальный scope:
WITH a AS (SELECT ...)
SELECT * FROM (SELECT * FROM a)
Доступно с версии 20.10. Разработчик — Amos Bird.
— для аутентификации уже заданных пользователей (20.7);
— LDAP в качестве справочника пользователей (20.11);
— LDAP в качестве справочника ролей;
— Kerberos аутентификация;
Разработчики — Денис Глазачев, Виталий Баранов.
— запросы DROP TABLE, RENAME TABLE теперь неблокирующие;
— запрос EXCHANGE TABLES;
Разработчик — Александр Токмаков.
По-умолчанию с версии 20.10. Обратная совместимость с версии 20.4.
— отказ от выбора лидера (20.5);
— параллельная вставка с кворумом (20.10);
— возможность повторной вставки на разные реплики (20.10);
— запрос ALTER DROP/DETACH PART (20.12);
Разработчики:
Алексей Миловидов, Александра Латышева, Александр Сапин, Николае Вартоломей.
— Компактные куски данных (с версии 20.3).
— Куски данных в оперативной памяти (с версии 20.6).
— Write-Ahead Log (с версии 20.6).
— Настройки durability (с версии 20.10).
Разработчик — Антон Попов.
1. Wide — классический формат.
2. Compact — все столбцы в одном файле.
3. Memory — данные в оперативке.
Регулируется настройками:
— min_bytes_for_wide_part,
min_rows_for_wide_part:
если размер больше — использовать wide формат.
— min_bytes_for_compact_part,
min_rows_for_compact_part:
если размер больше — использовать compact формат,
если меньше — использовать memory формат.
Wide > Compact > Memory
Классический формат.
Каждый столбец и индекс в отдельном файле.
Оптимален для чтения данных с дисков, в том числе медленных.
Дешёвый ALTER добавления или удаления столбца.
Все столбцы в одном файле.
Оптимален для вставки новых данных.
Особенно на медленных файловых системах.
Менее оптимален для чтения.
Рекомендуется для кусков данных небольшого размера.
Не рекомендуется использовать для всех кусков.
Доступен с версии 20.3, но выключен по-умолчанию.
С версии 20.10 будет использоваться для кусков до 10 МБ.
Данные в оперативной памяти.
+ Write-Ahead Log, отключаемый.
— in_memory_parts_enable_wal;
— write_ahead_log_max_bytes.
Ещё более оптимален для вставки новых данных...
... если выключить write-ahead log.
Более эффективен для чтения...
... но данные в оперативной памяти несжатые.
Все куски реплицируются так же, как обычно.
Экспериментальная возможность.
Если все ваши данные расположены на одном сервере...
Если вы не используете репликацию...
Если репликация есть, но в пределах одного региона...
— надо просто вызывать fsync до ответа на INSERT?
Eat My Data (2007):
https://www.youtube.com/watch?v=LMe7hf2G1po
Files Are Hard (2015):
https://danluu.com/file-consistency/
PostgreSQL "Fsyncgate" (2018):
https://lwn.net/Articles/752063/
Если все ваши данные расположены на одном сервере...
Если вы не используете репликацию...
Если репликация есть, но в пределах одного региона...
Тогда вот:
— min_rows_to_fsync_after_merge;
— min_compressed_bytes_to_fsync_after_merge;
— min_compressed_bytes_to_fsync_after_fetch;
— fsync_after_insert;
— fsync_part_directory;
— write_ahead_log_bytes_to_fsync;
— write_ahead_log_interval_ms_to_fsync;
— in_memory_parts_insert_sync.
Функции normalizeQuery, normalizedQueryHash.
SELECT normalizeQuery(query) FROM system.query_log
— замена литералов на ?
— замена списков литералов на ?..
— замена сложных алиасов на `?`
Доступно с версии 20.8.
У одного моего друга тормозил запрос...
... но он не хотел его показывать.
Решение:
clickhouse-format --obfuscate < query.sql
Доступно с версии 20.10.
Обфускация данных: https://www.youtube.com/watch?v=2iR7i4akL44
CREATE TABLE hits
(
event_time DateTime,
...
) ENGINE MergeTree ORDER BY ...
TTL event_time + INTERVAL 1 MONTH
RECOMPRESS CODEC(ZSTD(1)),
event_time + INTERVAL 1 YEAR
RECOMPRESS CODEC(ZSTD(6))
Разработчик — Александр Сапин. Доступно с версии 20.10.
CREATE TABLE hits
(
event_time DateTime CODEC(Delta, Default),
...
) ENGINE MergeTree ORDER BY ...
ALTER TABLE hits MODIFY COLUMN c
REMOVE COMMENT|CODEC|TTL
|DEFAULT|MATERIALIZED|ALIAS
Разработчик — Александр Сапин. Доступно с версии 20.10.
SELECT * EXCEPT(secret_column) FROM table;
SELECT table.* REPLACE(
(URL LIKE '%yandex%' ? '' : URL) AS URL) FROM table;
SELECT COLUMNS('^packet_') FROM table;
SELECT t.* APPLY(sum) FROM table AS t;
SELECT COLUMNS(x, y, z) APPLY(sum) FROM table;
Разработчик — Amos Bird, mfridental. Доступно с версии 20.10.
COLUMNS('regexp'): разработчик — mfridental. Доступно с версии 19.12.
20.12 — testing.
20.11 — prestable.
20.10 — stable.
20.9 — stable.
20.8 — LTS until 2021-09-30.
20.7 ... 20.4 — obsolete.
20.3 — LTS until 2021-03-12.
...
19.14 — obsolete.
Импорт данных из RabbitMQ.
Kerberos аутентификация для Kafka.
Бета unlimited storage в Яндекс.Облаке.
Форматы Regexp, RawBLOB, JSONAsString, LinesAsString.
Запуск clickhouse без пакетов и конфигурации.
Таблица system.crash_log, Sentry.
Вычисление корелляции рангов.
256bit Decimal.
Бэкапы.
Проекции.
Отказ от ZooKeeper.
Поддержка OpenTracing.
Хеджирование запросов.
Чтение срезов столбцов.
Функции анализа геоданных.
Анализ полудубликатов текстов.
https://clickhouse.tech/docs/ru/whats-new/extended-roadmap/
~ 500 задач с подробным описанием — зависимости, исполнители...
— ожидается в конце ноября.