Самые новые возможности ClickHouse

Самые новые
возможности ClickHouse

В предыдущих сериях:

https://clickhouse.com/presentations/meetup28/new_features/

CONSTRAINTs Prepared Statements Format ORC Format Template ORDER BY optimization WITH FILL text_log metric_log Query Profiler Globs for File/URL/HDFS RPM packages neighbor os_schedule_priority ALTER MODIFY SETTING SELECT FROM VALUES COLUMNS matcher LIVE VIEW Settings constraints Row Level Security Secondary Indices TTL expressions MySQL protocol Adaptive index granularity Advanced text search JSON functions Cascade MATERIALIZED VIEWs WITH ROLLUP/CUBE ASOF JOIN

Не буду рассказывать

Tiered Storage
— про это уже рассказал Владимир Чеботарёв.

Merge JOIN
— про это уже рассказал Артём Зуйков.

Внешние словари (было)

campaigns_dictionary.xml:

<yandex> <dictionary> <name>campaigns</name> <source> <mysql> <password>...</password> <port>3306</port> <user>metrika</user> <replica> <host>mtexample.metr.yandex.net</host> <priority>1</priority> </replica> <db>dicts</db> <table>campaign_names</table> </mysql> </source> <lifetime> <min>14400</min> <max>18000</max> </lifetime> <layout> <cache> <size_in_cells>1048576</size_in_cells> </cache> </layout> <structure> <id> <name>OrderID</name> </id> <attribute> <name>cid</name> <type>UInt32</type> <null_value>0</null_value> </attribute> <attribute> <name>name</name> <type>String</type> <null_value /> </attribute> </structure> </dictionary> </yandex>

Управление словарями SQL запросами

CREATE DICTIONARY db.dict ( region_id Int64 DEFAULT -1, name String DEFAULT 'unknown', population UInt64 ) PRIMARY KEY region_id SOURCE(MYSQL( USER 'root' PASSWORD '...' DB 'dictionaries' TABLE 'regions' REPLICA(PRIORITY 1 HOST 'server1' PORT 3306) REPLICA(PRIORITY 2 HOST 'server2' PORT 3306))) LAYOUT(HASHED()) LIFETIME(MIN 300 MAX 600);

Управление словарями SQL запросами

SELECT dictGetString('db.dict', 'name', toInt64(213));

Созданные словари также доступны на чтение в виде таблиц.

SELECT * FROM db.dict;

— доступно с версии 19.17.

Разработчики — Александр Сапин, Максим Сабянин

Источник Redis для словарей

— доступно с версии 19.16.

Разработчики — Алексей Басманов, Антон Попов

Layout sparse_hashed

— доступно с версии 19.15.

Разработчик — Azat Khuzhin

Параллельный парсинг форматов

clickhouse-local \ -S 'WatchID UInt64, JavaEnable UInt8, Title String, ...' \ --query "SELECT count() FROM table" < hits.tsv

Было: 46.2 sec., 192 096 rows/sec., 168 MB/sec.
Стало: 4.5 sec., 1 935 419 rows/sec., 1.7 GB/sec.

Работает для форматов TSV, CSV, JSONEachRow.

Работает в clickhouse-client, clickhouse-local,
HTTP интерфейсе, движках File, URL, HDFS, S3.

Включается настройкой input_format_parallel_parsing.
Уже включено по-умолчанию!

— доступно с версии 19.18.

Разработчики — Никита Михайлов, Олег Ершов

Оптимизация VALUES с выражениями

CREATE TABLE test.null (x UInt64, d DateTime) ENGINE = Null clickhouse-client --query "INSERT INTO test.null VALUES" <...

Вставка 1 млн. строк вида (1, '2019-12-11 00:00:00'):
0.108 sec.

Вставка 1 млн. строк вида (1, now()):
40.4 sec. — в 400 раз медленнее.

Вставка 1 млн. строк вида (1, now()) с включенной опцией
input_format_values_deduce_templates_of_expressions:
0.112 sec. — почти без регрессии производительности.

— доступно с версии 19.16.

Разработчик — Александр Токмаков

Формат JSONCompactEachRow

[11825667, "закрепление журные людьми и"] [7588965, "выпискусстановке фото 3д фирма"] [30622428, "губка перерьер ванновгород главный"] [15009727, "uhfvvf yfbck.n gtycb. ltym hj;ltyb 3"] [31235604, "порно друзья дачные коллетение спит 66"] [1036200, "oomph"] [22446879, "ионистранны в туре 17 март 2014 смотреть"] [792887, "пп оптики билей ремиум новый фасонвар"] [315961, "рангику"] [1151353, "дом-2 последние смотреть онлайн фигур"]

— доступно с версии 19.18.

Разработчик — Михаил Коротов

Формат CustomSeparated

Настройки:

format_custom_escaping_rule
format_custom_field_delimiter
format_custom_row_before_delimiter
format_custom_row_after_delimiter
format_custom_row_between_delimiter
format_custom_result_before_delimiter
format_custom_result_after_delimiter

Формат Template

Позволяет задать шаблон для форматирования или парсинга данных.

Шаблон содержит разделители и подстановки.

Для подстановок указан способ экранирования значений:
Quoted, Escaped, CSV, JSON, XML, Raw.

Website ${domain:Quoted} has ${count:Raw} pageviews.

Задаётся шаблон для строк, разделитель между строками
и шаблон для resultset.

Пример: распарсить access логи.
Пример: распарсить сложный вложенный JSON.
Пример: сформировать HTML прямо из ClickHouse.

Улучшение текстовых форматов

input_format_csv_unquoted_null_literal_as_null
— понимать NULL в CSV как NULL (иначе только \N).

input_format_null_as_default
— преобразовывать NULL в значение по-умолчанию.

input_format_tsv_empty_as_default
— преобразовывать пустые значения в TSV в значения по-умолчанию.

input_format_with_names_use_header
— использовать порядок столбцов в заголовке TSV, CSV;
— заполнять отсутствующие поля значениями по-умолчанию.

input_format_defaults_for_omitted_fields
— вычислимые default для JSONEachRow, TSV, CSV.

Поддержка сжатых файлов

Для таблиц типа File, URL, HDFS, S3:

SELECT * FROM url('https://site.ru/data.gz', TSV, 'phrase String, counter_id UInt32, ...') INSERT INTO TABLE FUNCTION url( 'https://site.ru/data.gz', TSV, 'phrase String, counter_id UInt32, ...')


Автоопределение по расширению или явное указание: gzip, none, auto:

SELECT * FROM url('https://site.ru/data', TSV, 'phrase String, counter_id UInt32, ...', 'gzip')

Разработчик — Андрей Бодров

TODO: поддержка Brotli.

Табличная функция s3

И движок таблиц S3:

SELECT * FROM s3(...) INSERT INTO TABLE FUNCTION s3(...) CREATE TABLE table ENGINE = S3(...)

— полная поддержка начиная с версии 19.18.

Разработчик — Владимир Чеботарёв

Функции для работы с географией

greatCircleDistance
— ускорена в 3 раза
с помощью кода Андрея Аксёнова;

greatCircleAngle
— возвращает расстояние на сфере в градусах;

geoDistance
— считает расстояние на эллипсоиде WGS-84
(при некоторых допущениях);

— доступно с версии 19.18.

Исправление работы Kafka

С версии 19.15 по 19.17 была регрессия производительности.
Теперь всё нормально.

— доступно с версии 19.18 и будет бэкпортировано.

Разработчик — Михаил Филимонов, при участии Ивана Лежанкина

Ещё всякие функции

arraySplit multiMatchAllIndices multiFuzzyMatchAllIndices arrayCompact isValidJSON arrayFill arrayReverseFill JSONExtractArrayRaw FQDN
char repeat

Ещё всякие фичи

Комбинаторы -OrNull и -OrDefault для агрегатных функций.

Bloom filter индексы для массивов.

Виртуальный столбец _shard_num.

Пропуск неизвестных настроек при распределённых запросах.

Одновременное использование FINAL и SAMPLE.

Оптимизация uniqCombined; uniqCombined64.

Быстрый count() по всей таблице.

Что дальше?

Декабрь 2019

RBAC

DateTime64

Полиморфные куски

Ручка для Prometheus

Кэш результатов запросов

Настраиваемые HTTP handlers

Публичный roadmap 2020!

https://clickhouse.com/docs/ru/extended_roadmap/

~ 500 задач с подробным описанием — зависимости, исполнители...

из них ~ 20 уже сделано :)

.

.

Web site: https://clickhouse.com/

Maillist: [email protected]

YouTube: https://www.youtube.com/c/ClickHouseDB

Telegram chat: https://telegram.me/clickhouse_ru, clickhouse_en

GitHub: https://github.com/ClickHouse/ClickHouse/

Twitter: https://twitter.com/ClickHouseDB

Google groups: https://groups.google.com/forum/#!forum/clickhouse