Fivetranで転送するとテーブル名やカラム名が変わってしまうので変換ツールを作った
はじめに
Fivetranで転送するとAPIで取得した際のschemaではなく、Fivetran独自のschemaに変更します。
この操作は必ず行われ、設定で元に戻すことはできません。
Fivetran側もこのように述べています。引用元
We don't allow for renaming because it goes against our one simple default choice principle to reduce the configurability in favor of simplicity and automation.
確かに命名をシンプルにするのは良いですが、膨大なテーブルが転送される中でschemaを変更されてはどこに何があるか困ってしまいます。
なので、マッピングができるように変換するような関数を作りました。
作成したもの
GASで作成し、スプレッドシート上で一覧を作れるようにしました。
転送元のSchemaからFivetranで作成されるSchemaに変換できるような関数です。
function convert_name_for_fivetran(str){
let convert_str = str.toString();
let char;
let char_previous;
// 記号とスペースを置換する
// 不足がある場合は足してください
convert_str = convert_str.replace(/[!? =~-]/g,"_");
// 先頭が数字の場合は頭にアンダースコアをつける
if(convert_str.substring(0,1).match(/[0-9]/)){
convert_str = "_" + convert_str;
}
// 後ろの文字から確認することで、ループ中に文字数を増やしても動作に影響がないようにする
for(let i=convert_str.length-1;i>0;i--){
char = convert_str.substring(i,i+1);
char_previous = convert_str.substring(i-1,i);
if(char.match(/[A-Z]/) && char_previous.match(/[a-z0-9]/)){
convert_str = convert_str.substring(0,i) + "_" + convert_str.substring(i);
continue
}
if(char.match(/[0-9]/) && char_previous.match(/[a-zA-Z]/)){
convert_str = convert_str.substring(0,i) + "_" + convert_str.substring(i);
continue
}
if(char.match(/[a-z]/) && char_previous.match(/[0-9]/)){
convert_str = convert_str.substring(0,i) + "_" + convert_str.substring(i);
continue
}
}
// 大文字を小文字に置換する
convert_str = convert_str.toLowerCase();
// 複数アンダースコアを1つにまとめる
convert_str = convert_str.replace(/__*/g,"_");
return convert_str;
}
イメージとしては、左に転送元のテーブル名やカラム名を並べ、右にこれを使って変換したものを並べていけば見やすくなると思います。
注意点
以下実装していないものがあります。
各種文字の翻訳
- ハングル
- カタカナ
- アラビア文字
- キリル文字
記号の置換に関して、不足している場合があります。
どの文字を使っているか確認してからお使いください。
参考にしたもの
Fivetranはschemaの命名ルールを以下のように定めています。
Table and column naming rule set
上から順に実装していけば、良いということですね。
かなり置換が多いので変換先で同じになってしまうnamingも多く存在します。エラーの元になることもありそうです。
最後に
いかがでしたでしょうか?
転送時に親切心で変換してくれるのは助かるんですが、これによってFivetranからのお引越しのコストがかなりかかってしまっている現状があります...
今は他に良さそうな製品もまだ出てきていないですが、そろそろ向き合わないとなーと思っております。
今後のデータ業界がどのようになっていくか楽しみです。
Discussion