> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по ClickHouse Obfuscator

# clickhouse-obfuscator

Простой инструмент для обфускации табличных данных.

Он читает входную таблицу и создаёт выходную таблицу, которая сохраняет некоторые свойства исходных данных, но содержит другие данные.
Это позволяет публиковать почти реальные production-данные для использования в бенчмарках.

Он предназначен для сохранения следующих свойств данных:

* кардинальностей значений (количества различных значений) для каждого столбца и каждого кортежа столбцов;

* условных кардинальностей: количества различных значений одного столбца при условии на значение другого столбца;

* распределений вероятностей абсолютного значения целых чисел; знака целых чисел со знаком; экспоненты и знака для чисел с плавающей точкой;

* распределений вероятностей длины строк;

* вероятности нулевых значений чисел; пустых строк и массивов, `NULL`;

* коэффициента сжатия данных при сжатии с помощью LZ77 и кодеков семейства entropy;

* непрерывности (величины разницы) значений времени по таблице; непрерывности значений с плавающей точкой;

* компонента даты значений `DateTime`;

* корректности UTF-8 в строковых значениях;

* строковые значения выглядят естественно.

Большинство перечисленных выше свойств важны для тестирования производительности:

чтение данных, фильтрация, агрегация и сортировка будут работать почти с той же скоростью,
что и на исходных данных, благодаря сохранённым кардинальностям, величинам, коэффициентам сжатия и т. д.

Он работает детерминированно: вы задаёте значение seed, и преобразование определяется входными данными и seed.
Некоторые преобразования взаимно однозначны и могут быть обращены, поэтому seed должен быть достаточно большим и храниться в секрете.

Для преобразования данных он использует некоторые криптографические примитивы, но с точки зрения криптографии делает это некорректно, поэтому результат не следует считать безопасным, если только у вас нет иных оснований. В результате могут сохраниться некоторые данные, которые вы не хотите публиковать.

Он всегда оставляет числа 0, 1 и -1, даты, длины массивов и флаги null в точности такими же, как в исходных данных.
Например, если в вашей таблице есть столбец `IsMobile` со значениями 0 и 1, то в преобразованных данных он будет иметь те же значения.

Таким образом, пользователь сможет точно посчитать долю мобильного трафика.

Рассмотрим ещё один пример. Если в вашей таблице есть приватные данные, например email пользователя, и вы не хотите публиковать ни один отдельный адрес электронной почты.
Если таблица достаточно большая, содержит много разных email-адресов и ни один из них не встречается значительно чаще остальных, инструмент анонимизирует все данные. Но если в столбце мало разных значений, он может воспроизвести некоторые из них.
Вам следует изучить алгоритм работы этого инструмента и точно настроить его параметры командной строки.

Этот инструмент хорошо работает только при наличии хотя бы умеренного объёма данных (не менее нескольких тысяч строк).
