< Back
< Back

置換ルール – FlyData Sync

< Back

用途

FlyData の Replacement Rule を使えば、指定したテキストを自動的に置換することができます。

例えば、Amazon Redshiftにデータを移行する前に、データの内容を隠してしまいたいカラムがあったとします。その場合、Replacement Ruleを設定することで、ロード前の段階でデータを変更しておくことが可能となります。

設定の仕方

Replacement RuleはJSONフォーマットを利用して、下記のように設定します。

[
  { "table" : "users",
    "column" : "user_id",
    "replace_rules" : [
      {"^-$" : null},
      {"#$" : ""}
    ]
  },
  { "table" : "orders",
    "column" : "name",
    "replace_rules" : [
      {"^(.*)$":"\\1!"}
    ]
  }
]

Replacement RuleはJSONオブジェクトの配列として記載します。各JSONオブジェクトにはtable, column, replace_ruleのキーが必要となり、JSONを通して設定することで自動的にデータを置換することが出来ます。

まず置換したい文字列のあるテーブル名、カラム名をそれぞれ、table, columnの値として設定し、最後にreplace_rulesに、置換ルールをJSONオブジェクトの配列として設定します。JSONオブジェクトのうち、キーには変換前の文字列を正規表現で、値には変換後の文字列をテキストとして、設定してください。(※正規表現にはRubyでサポートされている正規表現をサポートしています。)

例えば上で指定されたReplacement Ruleの場合、上から2番目の置換ルール({“#$” : “”})に基づき、末尾に#が付いているuser_idは全て#が取り除かれた状態でAmazon Redshiftに保存されます。

Replacement Ruleでは、上から3番目の置換ルールのように、置換変数を利用することもできます。この場合、(.*)でマッチするテキストが\1の置換変数に保存されるので、JSONの値を”\\1!”とすることで、ordersテーブルのnameカラムの各値の末尾に!をつけた状態で保存することができます。(※ダブルクォート内でバックスラッシュが一つだけの場合、8進数エスケープになってしまうので、バックスラッシュは二つつけて頂く必要があります。)

改行を含む文字列を置換するには?

置換対象のカラムが改行を含む場合、下記のように設定します。

[
  {
    "table": "items",
    "column": "name",
    "replace_rules": [
      {
        "(?m:.)": "*"
      }
    ]
  }
]

上記のように指定することで、itemsテーブルのnameカラムのすべての文字が1文字ずつ*に変換されます(改行も1文字として扱われます)。

例)変換前:

abc
defgh

例)変換後:

*********
大文字・小文字を区別せずに文字を置換するには?

特定の文字列を大文字小文字を無視して置換したい場合、以下のように設定します。

[
  {
    "table": "items",
    "column": "name",
    "replace_rules": [
      {
        "(?i:abc)": "abc"
      }
    ]
  }
]

上記のように指定することで、itemsテーブルのnameカラムに入力された文字について、以下のように変換されます。

例)変換前:

abcABCaBcAbc

例)変換後:

abcabcabcabc