Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

clickhouse-obfuscator

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

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

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

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

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

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

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

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

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

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

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

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

  • естественного вида строковых значений.

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

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

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

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

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

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

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

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

Navigation