YouTube трансляция:
https://www.youtube.com/c/ClickHouseDB:
https://youtu.be/HPJOgzQkRls
Telegram chat: https://telegram.me/clickhouse_ru, clickhouse_en
Футболки за вопросы!
Если вы задали вопрос через Zoom
— напишите после мероприятия мне в Telegram в личку:
свой вопрос, размер футболки и адрес для доставки курьером.
EXPLAIN queries Compact and In-memory data parts PostgreSQL wire protocol LDAP authentication Atomic database Background data recompression Column transformers RabbitMQ integration 256 bit Decimal Kerberos for Kafka and HDFS Query obfuscation and normalization Embedded Web UI
Улучшения внешних словарей — Максим Кита.
Родная интеграция с PostgreSQL — Ксения Сумарокова.
Реплицированные базы данных — Александр Токмаков.
Включите в конфиге: <grpc_port>9100</grpc_port>
.
Доступны все возможности родного протокола:
— TLS, compression, query progress,
query cancellation, sessions, external data...
Пример: clickhouse-client с помощью GRPC на Python.
utils/grpc-client/clickhouse-grpc-client.py
Разработчик — Виталий Баранов. Доступно с версии 21.1.
Позволяет отправить запрос на другую реплику,
если одна из реплик долго отвечает,
и выбрать из нескольких реплик самую быструю.
— для избавления от tail latencies на очень больших кластерах.
Доступно с версии 21.3.
* Самый большой ClickHouse кластер в Яндексе — >630 серверов,
но в других компаниях есть кластера намного больше.
Разработчик — Павел Круглов и Николай Кочетов.
Для трассировки ClickHouse запросов в рамках большой инфраструктуры:
— включено по-умолчанию;
— понимает HTTP заголовки opentelemetry;
— множество spans уже размечено внутри ClickHouse;
— данные записываются в system.opentelemetry_log
;
Разработчик — Александр Кузьменков. Доступно с версии 20.11.
Прозрачная работа со сжатыми файлами:
— gz, brotli;
— xz, zstd;
Example:
CREATE TABLE github_events_url ( ... ) ENGINE = URL( 'https://datasets.clickhouse.tech/github_events_v2.native.xz', Native);
Разработчик — Аби Палагашвили. Доступно с версии 21.1.
— UNION DISTINCT;
— REPLACE TABLE and CREATE OR REPLACE TABLE;
— aggregate_functions_null_for_empty;
— Extended CTE;
— Type cast for IN subquery;
— SHOW [CHANGED] SETTINGS;
— POSITION(needle IN haystack);
— DIV / MOD;
— SELECT ALL;
— экспериментальная и неполная;
— поможет в разработке сторонних инструментов,
работающих с ClickHouse запросами;
Например: подсветка синтаксиса в редакторе кода.
Разработчик — Иван Лежанкин. Доступно с версии 21.1.
Example: map Map(String, String)
SELECT map['hello']
Разработчик — Hexiaoting.
— для key-value запросов;
— идеально как источник для словаря;
Разработчик — Sundy Li.
ALTER UPDATE / DELETE IN PARTITION:
— ограничение области мутаций.
ALTER DROP PART:
— теперь и для Replicated таблиц.
TTL теперь удаляет пустые куски:
— нет путаницы с оставшимися кусками.
Анализ текстов с помощью алгоритмов Min-Hash и Sim-Hash
для поиска похожих или скопированных кусков.
Алгоритм Min-Hash:
1. Достаём из текста все шинглы из N идущих подряд слов.
2. Хэшируем шинглы!
3. Выбираем M хэшей с мин. значениями и столько же с макс.
4. Хэшируем хэши!
5. Тексты считаются дубликатами, если хотя бы один из двух хэшей совпал.
Разработчик — ucasFL. Доступно с версии 21.1.
Тесты на то, что у распределений отличаются средние,
полезно для A/B тестирования.
— studentTTest;
— welchTTest;
— mannWitneyUTest;
Корреляция рангов:
— rankCorr.
Разработчик — Никита Михайлов и другие. Доступно с версии 21.1.
ClickHouse Roadmap публично доступен на GitHub:
https://github.com/ClickHouse/ClickHouse/issues/17623
Там слишком много... я расскажу только чуть-чуть.
Provide alternative for ZooKeeper Nested and semistructured data Limited support for transactions Backups Hedged requests Window functions Separation of storage and compute Short-circuit evaluation Projections Lightweight DELETE/UPDATE Workload management User Defined Functions Simplify replication JOIN improvements Embedded documentation Pluggable auth with tokens
В разработке. Начальная поддержка в версии 21.1.
SET allow_experimental_window_functions = 1
Уже в релизе:
— OVER (PARTITION BY ... ORDER BY ...)
— aggregate functions over windows;
— WINDOW clause;
— frame specifications;
В разработке:
— non-aggregate window functions (rank, etc...);
Разработчик — Александр Кузьменков.
В разработке. Начальная поддержка в версии 21.1.
Множественная вложенность:
cart Nested( item_id UInt64, item_price Decimal(20, 5), features Nested( ...))
SELECT cart.item_id, cart.features.f1 FROM table
SELECT cart.* FROM table
Поддержка для вложенного JSON и Protobuf.
Разработчик — Антон Попов. Доступно с версии 21.1.
Множественные представления данных в одной таблице.
— разные ключи сортировки;
— подмножество столбцов;
— подмножество строк;
— предагрегации.
В ревью.
Отличия от материализованных представлений:
— данные в проекциях гарантированно консистентны;
— обновляются атомарно с таблицей;
— реплицируются так же, как таблица;
— лучшие проекции автоматически выбираются для SELECT.
В разработке.
— реализован сетевой протокол ZooKeeper;
— используется абстракция поверх ZooKeeper;
— реализована модель данных ZooKeeper;
— TestKeeperServer: сервер с моделью данных ZooKeeper для тестов;
— NuKeeperServer: сервер с распределённым консенсусом на RAFT;
— реализованы снапшоты, логи, восстановление после сбоя;
Преимущества:
— более простая эксплуатация;
— исправление "zxid overflow";
— исправление проблем с max packet size;
— исправление "session expired" из-за пауз GC;
— уменьшение потребления памяти;
— сжатые снапшоты и логи;
— встраивание в clickhouse-server.
Разработчик — Александр Сапин.
SELECT IF(number = 0, 0, 123 % number) FROM numbers(10)
— division by zero.
SELECT * FROM numbers(10) WHERE number > 0 AND 10 % number > 0
— division by zero.
— всегда выполняются обе ветки IF, AND и OR.
SELECT * FROM ( SELECT * FROM numbers(10) WHERE number > 0 ) WHERE 10 % number > 0
— division by zero.
Рассматриваем 5 способов реализации UDF, из них два обязательны:
1. UDF в виде SQL выражений.
CREATE FUNCTION f AS x -> x + 1
2. UDF как исполняемая программа.
Взаимодействие через пайпы, данные сериализуются в любом формате.
Что будет, если отправлять в ClickHouse INSERT-ы по одной строке?
Было: ничего хорошего.
— нужно было буферизировать данные самому, или пользоваться Kafka, или ставить clickhouse-bulk, kittenhouse, ...
Будет: всё хорошо.
— ClickHouse сам будет собирать данные в пачки и выполнять асинхронный INSERT.
21.4 — testing.
21.3 — prestable, LTS до 2022-03-01.
21.2 — stable.
21.1 — stable.
20.12 — stable.
20.12 ... 20.9 — obsolete.
20.8 — LTS до 2021-09-30.
...
20.3 — obsolete.
Публичный roadmap 2021: