こんちは!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クッキングライフを~笑