はじめに
テストデータ作成に迷える後輩を救いたかった
問題
負荷検証するにあたり本番相当のデータで検証をしたかった。
検証用環境としても個人情報もりもりのデータをマスクせずに登録はしたくない。
解決方法
A5SQLというツールの取得データをInsert文に変換する機能を使い、取得結果をマスクするようなSQLを実行する。
SQLのCASEとCONCATを組み合わせて個人情報のカラムを置換して取得する。
select
a.id
, case
when a.email is not null
then concat('kensyo_', a.id, '@domain.com')
end as email
, a.reset_password_token
...
おわりに
caseを利用することで取得されたカラムに対して条件付け(データがあれば・・・等)が可能になる。
concatを利用することで対象のカラムを書き換えることができるため、個人情報を含むカラムを特定の文字列+ID等に置換することができる。
一つ欠点を上げるとするとテーブル内のカラム数が増えた時に全カラム記載しないといけないのでアワワワワとなる。
参考
https://dev.mysql.com/doc/refman/8.0/ja/case.html
https://www.javadrive.jp/mysql/function/index35.html
https://a5m2.mmatsubara.com/