跳到主要内容
跳到主要内容

clickhouse-obfuscator

一个简单的表数据混淆工具。

它读取一个输入表并生成一个输出表,保持输入的一些属性,但包含不同的数据。 它允许发布几乎真实的生产数据用于基准测试。

它旨在保持以下数据属性:

  • 每列和每组列的值的基数(不同值的数量);

  • 条件基数:在另一个列值的条件下,一个列的不同值的数量;

  • 整数的绝对值的概率分布;带符号整数的符号;浮点数的指数和符号;

  • 字符串长度的概率分布;

  • 数字零值的概率;空字符串和数组,NULL

  • 使用LZ77和熵族编解码器进行压缩时的数据压缩比;

  • 表中时间值的连续性(差异大小);浮点值的连续性;

  • DateTime值的日期组件;

  • 字符串值的UTF-8有效性;

  • 字符串值看起来自然。

上述大多数属性适用于性能测试:

读取数据、过滤、聚合和排序的速度几乎与原始数据相同,因为基数、大小、压缩比等得到了保留。

它以确定性方式工作:您定义一个种子值,转换由输入数据和种子决定。 某些转换是一对一的,可以被反转,因此您需要有一个大的种子并将其保密。

它使用一些密码学原语来转换数据,但从密码学的角度来看,它并未正确处理,因此您不应认为结果是安全的,除非您有其他理由。结果可能保留您不想发布的数据。

它始终将0、1、-1数字、日期、数组的长度和空标志精确地保留为源数据中的值。 例如,您的表中有一个IsMobile列,值为0和1。在变换后的数据中,它将保持相同的值。

因此,用户将能够精确计算移动流量的比例。

让我们再举一个例子。当您在表中有一些私密数据,如用户电子邮件,而您不想发布任何单一的电子邮件地址时。 如果您的表足够大,并且包含多个不同的电子邮件,并且没有任何电子邮件的频率比其他电子邮件高,那么它将匿名化所有数据。但如果您在一列中有少量不同的值,它可能会再现其中一些值。 您应该查看该工具的工作算法,并微调其命令行参数。

该工具仅适用于至少中等数量的数据(至少数千行)。