mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-11 17:02:25 +00:00
44 lines
5.2 KiB
Markdown
44 lines
5.2 KiB
Markdown
# Обфускатор ClickHouse
|
||
|
||
Простой инструмент для обфускации табличных данных.
|
||
|
||
Он считывает данные входной таблицы и создает выходную таблицу, которая сохраняет некоторые свойства входных данных, но при этом содержит другие данные.
|
||
|
||
Это позволяет публиковать практически реальные данные и использовать их в тестах на производительность.
|
||
|
||
Обфускатор предназначен для сохранения следующих свойств данных:
|
||
- кардинальность (количество уникальных данных) для каждого столбца и каждого кортежа столбцов;
|
||
- условная кардинальность: количество уникальных данных одного столбца в соответствии со значением другого столбца;
|
||
- вероятностные распределения абсолютного значения целых чисел; знак числа типа Int; показатель степени и знак для чисел с плавающей запятой;
|
||
- вероятностное распределение длины строк;
|
||
- вероятность нулевых значений чисел; пустые строки и массивы, `NULL`;
|
||
- степень сжатия данных алгоритмом LZ77 и семейством энтропийных кодеков;
|
||
|
||
- непрерывность (величина разницы) значений времени в таблице; непрерывность значений с плавающей запятой;
|
||
- дату из значений `DateTime`;
|
||
|
||
- кодировка UTF-8 значений строки;
|
||
- строковые значения выглядят естественным образом.
|
||
|
||
|
||
Большинство перечисленных выше свойств пригодны для тестирования производительности. Чтение данных, фильтрация, агрегирование и сортировка будут работать почти с той же скоростью, что и исходные данные, благодаря сохраненной кардинальности, величине, степени сжатия и т. д.
|
||
|
||
Он работает детерминированно. Вы задаёте значение инициализатора, а преобразование полностью определяется входными данными и инициализатором.
|
||
|
||
Некоторые преобразования выполняются один к одному, и их можно отменить. Поэтому нужно использовать большое значение инициализатора и хранить его в секрете.
|
||
|
||
|
||
Обфускатор использует некоторые криптографические примитивы для преобразования данных, но, с криптографической точки зрения, результат будет небезопасным. В нем могут сохраниться данные, которые не следует публиковать.
|
||
|
||
|
||
Он всегда оставляет без изменений числа 0, 1, -1, даты, длины массивов и нулевые флаги.
|
||
Например, если у вас есть столбец `IsMobile` в таблице со значениями 0 и 1, то в преобразованных данных он будет иметь то же значение.
|
||
|
||
Таким образом, пользователь сможет посчитать точное соотношение мобильного трафика.
|
||
|
||
Давайте рассмотрим случай, когда у вас есть какие-то личные данные в таблице (например, электронная почта пользователя), и вы не хотите их публиковать.
|
||
Если ваша таблица достаточно большая и содержит несколько разных электронных почтовых адресов, и ни один из них не встречается часто, то обфускатор полностью анонимизирует все данные. Но, если у вас есть небольшое количество разных значений в столбце, он может скопировать некоторые из них.
|
||
В этом случае вам следует посмотреть на алгоритм работы инструмента и настроить параметры командной строки.
|
||
|
||
Обфускатор полезен в работе со средним объемом данных (не менее 1000 строк).
|