Matillionでテーブル出力する方法(Big Query)
どうも、最近、電子レンジ・IHヒーター・電気ポット・オーブンをフル稼働させ「こいつら全てを操って並列処理で料理してる俺、魔術師」と悦に浸っていたら、ブレーカーが落ちてしまった、分析官の岡部です。
データサイエンスで並列処理といえば
ですよね?
今をときめくデータサイエンス界のスターである彼らなら、私の繰り出す黒魔術にもブレーカーを落とすことなく耐えてくれることでしょう。
、、、とまあ、いささか無理矢理感のある導入ではありますが、本記事はMatillionの話です。(Matillionって何という方は記事下部で補足しておりますので、そちらをご覧ください)。 また、Matillion ETL for Google BigQueryを前提とします。
結論としては
これにつきます。以下はその詳細をくどくど説明しているだけなので、お急ぎの方は読む必要ありません。 実際にRewrite Tableコンポーネントでの出力を試してみて下さい。
Transformation Jobでのテーブル出力
MatillionはELTツールなので、生データを全て集約、その上でデータ整形していく思想で設計されています。 *1 *2。
当然、生データはそのままだと分析に使えないので、例えば顧客IDで集約したり、トランザクションテーブルと顧客マスタを結合したりと、分析に使いやすい形に整形しなければいけません。通称前処理です。Matillionではこれら前処理はTransformation Jobで行っていきます。
さて、お望みの前処理が構築できたらお次はテーブル出力です。 Rewrite Tableコンポーネントを使って以下の2パターンのいずれかで記述します。Table Outputコンポーネントではないことに注意してください。 実は以前は2.の方法で記述しなければならず、非常に初見者殺しだったのですが、 いつの間にか1.の方法でもいけるようになってました。
それぞれ実際の画面を見ながら確認していきましょう
1. テーブル名をコンポーネントにベタ書きする
下画像のようにRewrite Tableコンポーネントを選択、Target ProjectとTaget Datasetで出力先プロジェクト及びデータセットを指定します。 そしてTarget Tableに出力したいテーブル名を記述する、これだけです。ここではtest_rewrite_tableとしました。
2. 出力テーブル名を変数としてコンポーネントの外部で設定する
まずはテーブル名の変数を定義します。 キャンバスの適当な位置で右クリック、Manage Job Variablesを選択して下さい。 Nameにテーブル名を入れる変数の名前を、Valueに出力テーブル名を記述します。 残りの設定は一旦そのままにしておいて下さい。
OKを押してポップアップを閉じ、再び1同様rewrite Tableコンポーネントを編集していきましょう。 Target ProjectとTaget Datasetに関しては1と同じなのですが、Target Tableの設定が異なります。 Use Variablesにチェックを入れ、先ほど設定したtable_nameを選択して下さい。
結論
結論というか気をつけるポイントとしては
これに尽きるでしょう。
余談
テーブル出力するって、そんな簡単なことをわざわざブログに書かなくても、、、
僕もそう思います。
しかし、実はこの件に関する質問、過去3回以上受けているのです。
データサイエンティストのDavid Robinson氏(
David Robinson (@drob) | Twitter
)によると、
「3回同じアドバイスをしたらそれはブログに書きなさい」とのことなのでこの方針に従っております。
かく言う僕自身、最初は全くやり方がわからず、「Viewを作りBig Queryのコンソール画面でテーブル化」みたいな無駄なやり方をしていました。。。
しかしなぜそんなにわかりにくいのでしょう?
それはTable Outputなる超絶紛らわしいコンポーネントがあるからです。
しかもこいつ「すでに出力先テーブルは存在していなければならない」というクセモノ。
遊戯王でいうと
「このカードは通常召喚できない。自分の墓地の闇属性モンスターが3体の場合のみ特殊召喚できる。」
みたいなものです。死者蘇生では召喚できません。(間違ってたらすみません。)
個人的にはRewrite Tableと名前逆じゃねえか?と思います。
さらに僕がハマった当時は、
「Rewrite Tableコンポーネントを使った上で、テーブル名はJob Variablesで定義しなければならない」
みたいな仕様でした。
わかってしまえばなんてことはないので、ご参考になれば嬉しいです。
そしてもし、もっといいやり方がある、そんなやり方間違っている、という方がいればそっと教えていただけると助かります。
それでは快適なMatillionライフを。
(補足)Matillionってなに?
Matillionってなに?なにがそんなにいいの?という方は例えば以下の記事をご覧ください
また、弊社開発の自動機械学習ツールForecastFlowとも連携できます Big Queryにデータ集約→その圧倒的計算パワーを活かして前処理→機械学習モデルの作成→訓練済みモデルの日次運用、といったことが簡単にできるようになります。 気になる方は以下のブログ及び動画をご覧ください
*1:え?ETLじゃなくてELT? → https://it-trend.jp/etl/article/252-0002
*2:違いはわかった。でもMatillionの公式サイト行くと、ETLってあるんだけど? → https://www.xplenty.com/jp/blog/matillion-vs-xplenty-ja/