Matillionとは、ELTツールの1つです。Tableau Prepに似ているところがあり、コンポーネントと呼ばれるパーツを繋げていくと、データ整形ができるものです。実際はコンポーネントに沿ってSQLを書いてデータベースへ発行、ということをしています。
すべてのデータ整形に当てはまることですが、MatillionもInputがあり、コンポーネントを繋げた先でOutputをすると整形データテーブルとして存在するようになります。
Matillionは接続しているデータベースにSQLを送って処理してもらい、Output先にテーブルとして出力します。MatillionはSQLを出すだけで処理はテーブルを持っているデータベース依存になるので、PCだと重すぎてできない整形もデータベースの容量が大きければできてしまったりします。
もう1つTableau Prepと違うところを上げるなら、整形処理の豊富さです。たくさんコンポーネントがあります。また、使える関数やできることはすべて接続しているデータベースに依存するので、使いたいコンポーネントがないときもSQLコンポーネントで書いてしまえば実現可能です。
そのコンポーネントで、使い方に悩むのがテーブルを出力するコンポーネントです。なんでいっぱいあるの…。
Matillionの出力の仕方については、弊ブログですでにあります。
ここでは出力はRewrite Tableコンポーネントを使おう、となっています。
しかし場合によってはTable Outputコンポーネントの方がいいときもあるかもしれません。
Table OutputとRewrite Tableは何が違うのか
ここから先、基本的なSQLの用語を交えて書きます。
また、確認したのはデータベースがSnowflakeの場合の挙動になりますのでご注意ください。
Table OutputとRewrite Tableは使うSQLの種類が違います。Table OutputはDML(データ操作言語)であるINSERT文を書くコンポーネントです。INSERTを使っているので、出力時点ですでにテーブルが存在していないといけないし、テーブルの列構成をそろえないといけないわけです。
対してRewrite Tableは、DDL(データ定義言語)であるCREATE文を書いてくれます。CREATEだから、定義済みのテーブルが要りません。また、すでに存在しているテーブルを指定すると、そのテーブルは破棄されて上書きされます。Rewrite Tableは、テーブルを毎度作り直しているわけです。
このDMLとDDLの違いは、Rollbackという処理に影響します。Rollbackは、整形に失敗したときなど、不具合の起きたときに処理を巻き戻して整形SQLを処理する前の状態にもどしておいてくれる機能です。
MatillionにもRollbackコンポーネントはあり、不具合が起きたときにRollbackが起こるようにしておけば、そのようにしてくれます。
しかし、Rollbackという処理はINSERT文などのDMLにのみ有効で、DDLでは無効になります。CREATE文を使った場合、Rollbackをしても処理前に戻ることはなく、上書きされたままになります。
なので、Rewrite Tableコンポーネントを使った後にRollbackはできない、ということになります。
まとめ
Table OutputはRollbackができるので、慎重に更新したい、運用にのったテーブルはこちらが向いているのではないかと思います。オプションでTrancateを選択するとテーブルを一度全消去してくれるので、全件更新も可能。
対してRewrite TableはRollbackを使えないが、あらかじめテーブルを作成する必要がなかったり、列の定義や設定がめんどくさくなかったりします。しょっちゅう列定義が変わるような開発中のテーブルはこちらで出力するのが向いていると思います。
参考
Table Outputのドキュメント
https://documentation.matillion.com/docs/1991942
Rewrite Tableのドキュメント
https://documentation.matillion.com/docs/1991941
Rollbackのドキュメント
https://documentation.matillion.com/docs/2388256
実はinputのコンポーネントも複数あります。Table Inputコンポーネントで困ることはなかったので、他は使っていませんがもしかしたらここも何かあるのかも…。