clickhouse-obfuscator
テーブルデータのオブフスケーションのためのシンプルなツールです。
入力テーブルを読み込み、入力のいくつかの特性を保持しながら異なるデータを含む出力テーブルを生成します。これにより、ベンチマークで使用するためのほぼ実際のプロダクションデータを公開することが可能になります。
このツールはデータの次の特性を保持するように設計されています:
-
各カラムおよびカラムのタプルの値の基数(異なる値の数);
-
条件付き基数:他のカラムの値に基づく1つのカラムの異なる値の数;
-
整数の絶対値の確率分布; 符号付き整数の符号; 浮動小数点数の指数と符号;
-
文字列の長さの確率分布;
-
数字のゼロ値の確率; 空文字列および配列、
NULL
s; -
LZ77およびエントロピー系のコーデックで圧縮した場合のデータ圧縮比;
-
テーブル全体に渡る時間値の連続性(差の大きさ); 浮動小数点数の連続性;
-
DateTime
値の日時成分; -
文字列値のUTF-8の有効性;
-
文字列値が自然に見える。
上記のほとんどの特性はパフォーマンステストにおいて有効です:
データの読み取り、フィルタリング、集約、およびソートは、保存された基数、量、圧縮率などによって、元のデータとほぼ同じ速度で動作します。
このツールは決定論的に動作します。シード値を定義すると、変換は入力データとシードによって決まります。 いくつかの変換は一対一であり、逆転可能であるため、大きなシードを持ち、それを秘密にしておく必要があります。
データを変換するためにいくつかの暗号的なプリミティブを使用しますが、暗号的な観点から適切に実行されているわけではないため、別の理由がない限り、結果を安全なものとして考慮しない方が良いでしょう。結果は、公開したくないデータを保持している場合があります。
常に0、1、-1の数字、日付、配列の長さ、およびNULLフラグは、ソースデータと正確に同じように保持されます。
例えば、テーブルに0および1の値を持つIsMobile
カラムがあるとします。変換されたデータでは、同じ値が保持されます。
したがって、ユーザーはモバイルトラフィックの正確な比率を計算することができます。
別の例を挙げましょう。テーブルにユーザーのメールアドレスなどのプライベートデータが含まれていて、特定のメールアドレスを公開したくない場合。 テーブルが十分に大きく、複数の異なるメールアドレスが含まれ、他のメールと比較して非常に高頻度のメールがない場合、すべてのデータが匿名化されます。しかし、カラムに異なる値の数が少ない場合、それらの一部を再現することがあります。 このツールの動作アルゴリズムを確認し、そのコマンドラインパラメータを微調整する必要があります。
このツールは、最低でも中程度のデータ量(少なくとも1000行)が必要です。