clickhouse-obfuscator
Простое средство для обфускации данных в таблицах.
Он считывает входную таблицу и создает выходную таблицу, которая сохраняет некоторые свойства входных данных, но содержит другие данные. Это позволяет публиковать почти реальные производственные данные для использования в бенчмарках.
Он предназначен для сохранения следующих свойств данных:
-
кардинальности значений (число уникальных значений) для каждого столбца и каждой кортежа столбцов;
-
условные кардинальности: количество уникальных значений одного столбца при условии на значение другого столбца;
-
распределения вероятностей абсолютных значений целых чисел; знак знаковых целых чисел; экспонента и знак для чисел с плавающей точкой;
-
распределения вероятностей длины строк;
-
вероятность нулевых значений чисел; пустых строк и массивов,
NULL
; -
отношение сжатия данных при сжатии с помощью LZ77 и семейства кодеков энтропии;
-
непрерывность (мagnitude of difference) временных значений по всей таблице; непрерывность значений с плавающей точкой;
-
компонент даты значений
DateTime
; -
корректность UTF-8 строковых значений;
-
строковые значения выглядят естественно.
Большинство вышеупомянутых свойств подходят для тестирования производительности:
чтение данных, фильтрация, агрегация и сортировка будут работать почти с такой же скоростью, как и с оригинальными данными, благодаря сохранённым кардинальностям, величинам, отношениям сжатия и т.д.
Он работает детерминированным образом: вы определяете значение seed, и преобразование определяется входными данными и seed. Некоторые преобразования являются взаимно однозначными и могут быть обращены, поэтому вам нужно иметь большой seed и хранить его в секрете.
Он использует некоторые криптографические примитивы для преобразования данных, но с криптографической точки зрения делает это неправильно, поэтому вы не должны считать результат безопасным, если у вас нет другой причины. Результат может содержать данные, которые вы не хотите публиковать.
Он всегда оставляет цифры 0, 1, -1, даты, длины массивов и нулевые флаги точно такими же, как в исходных данных. Например, у вас есть столбец IsMobile
в вашей таблице со значениями 0 и 1. В преобразованных данных он будет иметь то же значение.
Таким образом, пользователь сможет подсчитать точное соотношение мобильного трафика.
Приведем еще один пример. Когда у вас есть какие-то личные данные в вашей таблице, например, адрес электронной почты пользователя, и вы не хотите публиковать ни один адрес электронной почты. Если ваша таблица достаточно велика и содержит множество различных адресов электронной почты, и ни один адрес электронной почты не имеет очень высокой частоты по сравнению с другими, она анонимизирует все данные. Но если у вас небольшое количество разных значений в столбце, это может воспроизвести некоторые из них. Вам следует изучить работу алгоритма этого инструмента и точно настроить его параметры командной строки.
Этот инструмент работает хорошо только с хотя бы умеренным количеством данных (не менее 1000 строк).