clickhouse-obfuscator
一个用于表数据模糊处理的简单工具。
它读取输入表并生成输出表,该输出表保留输入表的一些属性,但包含不同的数据。它允许发布几乎真实的生产数据以用于基准测试。
它旨在保留数据的以下属性
每列和每列元组的值基数(不同值的个数);
条件基数:一列在另一列的值上进行条件限制时不同值的个数;
整数绝对值的概率分布;带符号整数的符号;浮点数的指数和符号;
字符串长度的概率分布;
数字为零的概率;空字符串和数组,
NULL
s;使用 LZ77 和熵系列编解码器压缩后的数据压缩率;
表中时间值的连续性(差值大小);浮点值的连续性;
DateTime
值的日期部分;字符串值的 UTF-8 有效性;
字符串值看起来很自然。
上面大多数属性都适用于性能测试
读取数据、过滤、聚合和排序的速度与原始数据几乎相同,因为保留了基数、大小、压缩率等。
它以确定性方式工作:你定义一个种子值,变换由输入数据和种子决定。一些变换是一对一的,可以逆转,因此你需要一个大的种子并将其保密。
它使用一些加密原语来转换数据,但从加密的角度来看,它没有正确执行,因此你不应该将结果视为安全,除非你有其他理由。结果可能保留一些你不希望发布的数据。
它始终保留 0、1、-1 数字、日期、数组长度和空标志,与源数据完全相同。例如,你的表中有一列 IsMobile
,其值为 0 和 1。在转换后的数据中,它将具有相同的值。
因此,用户能够计算出移动流量的准确比例。
我们再举一个例子。当你的表中有一些私密数据,例如用户的电子邮件地址,并且你不想发布任何单一的电子邮件地址时。如果你的表足够大,并且包含多个不同的电子邮件地址,并且没有哪个电子邮件地址的频率明显高于其他所有电子邮件地址,那么它将匿名化所有数据。但是,如果你在某一列中只有少量不同的值,那么它可能会复制其中一些值。你应该查看此工具的工作算法,并微调它的命令行参数。
此工具仅对至少中等量的数据(至少 1000 行)有效。