Matillion

MatillionのTable OutputとRewrite Tableの違い

Matillionとは、ELTツールの1つです。Tableau Prepに似ているところがあり、コンポーネントと呼ばれるパーツを繋げていくと、データ整形ができるものです。実際はコンポーネントに沿ってSQLを書いてデータベースへ発行、ということをしています。

すべてのデータ整形に当てはまることですが、MatillionもInputがあり、コンポーネントを繋げた先でOutputをすると整形データテーブルとして存在するようになります。

Matillionは接続しているデータベースにSQLを送って処理してもらい、Output先にテーブルとして出力します。MatillionはSQLを出すだけで処理はテーブルを持っているデータベース依存になるので、PCだと重すぎてできない整形もデータベースの容量が大きければできてしまったりします。

もう1つTableau Prepと違うところを上げるなら、整形処理の豊富さです。たくさんコンポーネントがあります。また、使える関数やできることはすべて接続しているデータベースに依存するので、使いたいコンポーネントがないときもSQLコンポーネントで書いてしまえば実現可能です。

 

そのコンポーネントで、使い方に悩むのがテーブルを出力するコンポーネントです。なんでいっぱいあるの…。

Matillionの出力の仕方については、弊ブログですでにあります。

Matillionでテーブル出力する方法(Big Query)(追記)2021年12月14日 こちらの記事で遥かに整理された方法が紹介されておりますので、併せてご覧下さい。執筆当時の私のSQL...

ここでは出力は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コンポーネントで困ることはなかったので、他は使っていませんがもしかしたらここも何かあるのかも…。

C.T
こんにちは!フレンドコードは11463259884533087です