Matillion

Matillionのテーブル出力コンポーネント3種の違いとは??

こんちは!yokochanです!

最近外食生活から自炊生活に切り替えようと家で料理をすることが増えたのですが、料理とMatillionのELT処理って割と似てる気がするんですよね。

食材(データソース)を調理(データ加工)して料理(データマート)になる、みたいな笑

余談はさておき。

MatillionのTransformation jobで使うテーブル出力のコンポーネント3種類をご紹介します!

ちなみにDWHはSnowflakeを使っています。

テーブル出力コンポーネントの種類

テーブル出力に関するコンポーネントは3種類あります。

  • Rewrite Table
  • Table Output
  • Table Update

Matillionのメニューで言うと、「Write」フォルダの中にあります。(Create Viewはビューを作成するものなので今回は説明しません)

それでは1つずつ特徴を見ていきましょう!

Rewrite Table

特徴

Rewrite Tableは何もない状態でもテーブルを書き出すことができます。

特に何も考えず、加工したデータをそのままテーブルに出力したいときに使える一番シンプルなコンポーネントです。

設定項目

Name コンポーネント名を入力(出力するテーブル名とは別)
Warehouse 使用するウェアハウスを選択
Database テーブル出力先のデータベースを選択
Schema テーブル出力先のスキーマを選択
Target Table 出力するテーブル名を入力
Order By 並び替えをする場合は、列名と昇順or降順を選択

発行されるSQL文の種類

このコンポーネントが発行するSQLは「CREATE or REPLACE TABLE ~」です。

そのため既存のテーブルがなければテーブルを新規作成し、既存のテーブルがあればそれをすべて洗い替えるような処理になります。

ただし、これが一番簡単だからといって考えずに使っていると、間違えて上書きしてしまったときなどに面倒なことになるので気を付けましょう。

公式ドキュメントはこちら

Table Output

特徴

既存のテーブルが用意されている場合に使えます。逆にテーブルがない場合はこのコンポーネントは使えません。

既存のテーブルに行をサクッと追加したいときにはこれを使うと良いでしょう。

設定項目

Name コンポーネント名を入力(出力するテーブル名とは別)
Warehouse 使用するウェアハウスを選択
Database テーブル出力先のデータベースを選択
Schema テーブル出力先のスキーマを選択
Target Table 出力するテーブル名を選択
Fix Data Type Mismatches Yesを選択するとデータ型が異なる場合、ターゲットテーブルのデータ型に合わせて修正される(Noの場合は修正されない)
Column Mapping ソースフィールドがターゲットテーブルのどの列に対応するかを設定
Order By 並び替えをする場合は、列名と昇順or降順を選択
Truncate インプットする前に既存の行をすべて削除するか選択

発行されるSQL文の種類

このコンポーネントが発行するSQLは「INSERT ~」です。

そのため、追加したい行をそのまま追加するような処理になります。

公式ドキュメントはこちら

Table Update

特徴

Table Outputと同様に、既存のテーブルが用意されている場合に使えます。逆にテーブルがない場合はこのコンポーネントは使えません。

既にある特定の行は更新して新しい行は挿入したいという場面で使います。

設定項目

Name コンポーネント名を入力(出力するテーブル名とは別)
Warehouse 使用するウェアハウスを選択
Database テーブル出力先のデータベースを選択
Schema テーブル出力先のスキーマを選択
Target Table Name 出力するテーブル名を選択
Target Alias ターゲットテーブルの別名。Join Expressionsで使用
Source Alias ソースフィールドの別名。Join Expressionsで使用
Join Expressions ソースフィールドがそれぞれどのターゲットテーブルの列と対応しているのかを設定。ここで設定した列が一致不一致の判定に使用される。
When Matched 設定したカラムの値がソースフィールドと一致したときに行を削除するか更新するかを選択
Include Not Matched TRUEを選択した場合、一致しなかった列を挿入
Update Mapping When Matchedで更新を選択した場合、ここでソースフィールドがターゲットテーブルのどの列に対応するか設定
Insert Mapping Include Not MatchedでTRUEを選択した場合、ここでソースフィールドがターゲットテーブルのどの列に対応するか設定

発行されるSQL文の種類

このコンポーネントが発行するSQLは「MERGE ~」です。

MERGE文は聞き慣れないかもしれませんが、要するに特定のカラムが一致したときと一致しなかったときで別の処理を走らせることができるものです。

なので、特定のカラムが一致したときには「UPDATE」を、一致しなかったときは「INSERT」を使う、といった具合に使い分けができる非常に便利なクエリです。

既存のテーブルに更新をかける際はこのコンポーネントを使うのが汎用性が高くて良いでしょう。

公式ドキュメントはこちら

 

以上、ご参考になれば幸いです!

みなさま良きMatillionクッキングライフを~笑

yokochan
データ基盤構築やデータ可視化をやっています。 夏は沖縄の海、冬は北海道の山、年がら年中ももクロのライブ会場。