Preppin Data 2023 W03で「結合」を使わずに「ユニオンと集計」でフローを作って見た
はじめに
Japan Preppin Data Famに参加しているNakajimaです。
半月ほど前から、Preppin Data勉強会の初級コースに参加しています。10名強のメンバーと毎週 事前作成したお題からのフローをそれぞれ発表し、お互いのフロー作成に対する考え方、テクニックを議論しています。
毎回、参加メンバーから新しい発見を得て、ほんとに勉強になっていると思っています(みなさんに感謝、感謝)。
今回、お題となった2023W03にて、Solutionとしては結合を用いてフローを作成するところを、結合を使わずにユニオンと集計を用いる別手法でのフロー作成にチャレンジしました。
作成のポイント、結合方法との差異、類似点など作業を通てじての気づきを記載してみました。
ユニオンと集計での方法にチャレンジ
なかむらメソッド
Japan Preppin Data Famの参加メンバー なかむらさんが提案した方法があります。
リレーショナルデータベースを少し齧った物からは、「複数テーブルで共通キーフィールドがある場合は結合を使う!!」ことが常識と思っていたところで見た衝撃。
複数テーブルを一回で読み込み、枝分かれの無い一本のフローを見た時の驚きと、Nullを利用した集計処理の説明を受けた時の感動が忘れられない、素晴らしいテクニックです。
今回は、Preppin Data 2023W03(課題)の勉強会で、なかむらメソッドの利用にチャレンジしてみました。
Solutionでの結合フロー
Preppin DataのSolutionでも説明されているのは、(普通の)結合を用いたフローになります。
このフローと、ユニオン+集計で作成するフローを比べてみたいと思います。
実際にユニオン+集計を使ってフローを作ってみた
なかむらメソッドのシンプルなフロー
この方式の特徴は、次の点になります。理想的なフロー図は、下図の通りです。
複数テーブルをワイルドカードユニオンなどで一度に読み込む形でデータソースを取り込む
Nullを利用した上手い集計の利用を用い、枝分かれの無い一本のフローでまとめる。
結合処理の置き換えで考えると
前述のSolutionで提供されたフローを同じく、二つのデータソースにそれぞれ前処理を行ってからユニオン+集計を行ったフローが次のものになります。
結合部分をそのままユニオン+集計に置き換えた形になります。
今回の事例で理想系に近づけるには
Preppin Data 2023W03の課題では、提供されたデータソースでピボット処理が必要になります。シンプルな一本のフローで操作する際にピボット処理はデータ集計を狂わす要素になります。
今回は事前処理として、ユニオン前にピボット処理を実施しておく必要があります。その上でのBestな形は、次のフローになりました。
作成時の留意点
図4のフロー作成時に、ユニオン後のクリーニングステップでは計算フィールドを一切使わず、Prep標準となっている操作メニューのみを用いて各処理を実施しています。
操作時の留意点や、結合フローとの比較での気づきを事項でまとめてみます。
やってみて気づいたこと
データフィルタ時のNull扱い
今回の課題では、2種のデータソースを利用した処理をしています。ユニオン後のデータに対するフィルタ処理の際に、Nullに留意、具体的にはNUllを削除せずフィルタで保持する必要が出てきます。
具体的には、DSBの値をフィルタで保持する処理で、DSBと共にNullも一緒に保持する設定が必要となります。
今回の場合は、Quarterly Targets datasetテーブルの値を保持するため、Nullを消さないようにする留意点があります。
集計前のデータ形態
ユニオン後の一連の処理後のデータ内容を図6に示します。
結合を用いるフローのデータと比較して、次の点が分かります。
Nullデータの無いフィールドと、Nullデータが有るフィールドがある。
Nullデータが無いフィールドは、結合処理でキーフィールドとして利用するフィールドと同じになる。
Nullデータが有るフィールドは、(1)上にデータがあり下がNullのもの と (2)上がNullで、下にデータが有るもの の2種がある。
(1)はQuarterly Targets datasetテーブルからのデータフィールド、(2)はTransactionsテーブルからのデータフィールドに相当する。
(1)、(2)のNullデータは、集計処理時に値が無いものとしてデータの集計に邪魔をせず、集計処理でそのまま消失される。
結合を用いたフローの処理と比較し、ユニオン+集計 での集計作業を一操作ごとの意味合いを考えながら操作することで、データの持ち方、処理の意味を理解しながら作業を進めることが出来ました。
Prepの処理作業の意味合いを理解しながらのPracticeになりました。
終わりに
毎週開催の勉強会で、上記の示唆を考えながら作業を進めることでPrepの理解度が少し深まったと感じています。
また、勉強会 参加者メンバーからの同種アプローチが、完全に処理が一致することなく、少し違った知見での説明があり、新たな発見があることが学びを増やすことを体感しています。
勉強会は、メンバーからのの刺激も受けつつ、時間がつけば参加を継続したいと思っています。
今回、チャレンジした内容を説明のためにNOTEへ記載してみましたが、Prepに関する掲載は 継続して続けてみたいと思いました。
来年春以降、週1回ぐらいPrepに関する投稿を行うことを目標においてみようかな! と考え始めました。
この記事が気に入ったらサポートをしてみませんか?