AWS Glue の新データプレビュー機能でデータの整合性を検証してみた

## はじめに
AWS Glue は、データレイクとデータパイプラインの作成、管理、実行を支援するフルマネージドサービスです。2023年11月に、AWS Glue にインタラクティブなデータプレビュー機能が追加されました。この機能により、**ジョブを保存・実行せずに**ノードごとにデータパイプラインのデータを簡単にプレビューして、データの品質や整合性を検証できるようになります。
(参考：https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-glue-studio-visual-interactive-data-previews/)

## メリット
データプレビュー機能を使用すると、以下のメリットがあります。
* **データの品質や整合性を検証しやすくなる**
データプレビュー機能を使用すると、データレイクやデータパイプラインのデータを目視で確認できるので、データの品質や整合性を簡単に検証できます。
　　
    1. データの欠損
    2. データの重複
    3. データの不正確さ
    4. データの整合性
     　　
* **ジョブの作成やデバッグが容易になる**
    データプレビュー機能を使用すると、ジョブ作成・編集時にデータプレビューを表示できるため、ジョブの作成やデバッグが容易になります。具体的には、以下の点を確認できます。
    
    1. ジョブの処理結果が想定通りであるか
    2. ジョブの処理に必要なデータがすべて含まれているか
    3. ジョブの処理に不具合が発生していないか
## デメリット
* **料金**
    * ジョブ作成時のノード追加などによる操作によってリクエストが発生し、想定外の費用の増加につながる場合があります。例：API実行回数の増加、データソースからのデータ取得料の増加など
### 使用方法
データプレビュー機能を使用するにあたって事前に設定は不要です。



AWS Glue Studio のビジュアルエディター![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/0d9f3dbc-90d4-9385-a996-53d9f97ddcf2.png)

1. AWS Glue Studio で、ジョブを作成します。
2. ジョブのソース、ターゲット、変換ノードの各ノードに、データプレビューを表示したいデータを選択します。
3. ビジュアルエディター上でいずれかのノードを選択することで画面下部にデータプレビュー画面が表示されます。
4. 必要な権限が付与されたIAMロールを選択します。その後、「Start session」を押下することでセッションを開始できます。一つのセッションで他のノードにおいてもデータプレビューができます。
参考：https://docs.aws.amazon.com/ja_jp/glue/latest/dg/set-up-iam.html


## 使ってみた

### 1.サンプルデータの準備
今回はサンプルデータ（csv）をS3に格納し、Glue Data Catalog にテーブルとしてインポート、こちらを入力データとしてジョブを作成しました。サンプルの製品、顧客、販売データ用意し、使用していますので登場する個人情報はすべてダミーです。顧客データは[「個人情報テストデータジェネレーター」](https://testdata.userlocal.jp/)様から取得、製品・顧客データはChatに丸投げして出てきたpythonコードをColabで実行して作成しました。ちょっとしたことやらせるのにはほんと便利ですね。
　　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/59a5bf90-e003-b6e4-5944-7d14f8203609.png)

販売データ：purchase_data（1000件中６件のみ表示）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/e4fa110a-7395-ed6c-a395-2088ddb341b2.png)

製品データ：product_data
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/b79556d2-53f9-bbef-4391-e667b6d1ddeb.png)

顧客データ：customer_data（ダミーデータにしてはリアル..）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/df5cdfc0-99f7-6f17-60d8-cd077e1f752c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/c0c57867-ac73-f591-3703-305184efb492.png)

### 2.ジョブ作成

とりあえず、結合してみました。キーはそれぞれproduct_idとmy_numberです。マイナンバーを販売データ管理のキーにしてるなんてことは現実味ないですが、テストなので良しとします。。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/2c679593-83a4-16e0-1cce-e7e65570cf21.png)
### 3.データプレビュー開始
先述した手順に従ってセッション開始します。
セッション開始には１～２分程かかります。エディターを閉じると再度セッション開始する必要があり、待機時間の変化は特になし。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/17fd9db3-ec24-8b0b-4d90-d60d61d90c24.png)

　　
前段階のJOINのノードを参照すると、product_idによる左結合の結果が確認できています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/3e94be48-56eb-8361-54a1-c9177d0ec153.png)
　　
次段階のJOINのノードも問題なく結果が確認できています。データの異常も一目で確認できます。また、**ノードごとのデータプレビューの切り替えは数秒で可能です。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615400/68a2b7c6-150b-4927-dba2-6c6bda45132b.png)

## まとめ
今回の発表は個人的にはかなり有用な機能と感じました。データプレビュー機能自体は２年程まえからあったようです。しかしながら、一つのセッションで複数のデータセットを確認できないためにノードごとのデータを確認するたびにセッションを開始する必要があり、毎回数分の待機時間が発生してしまっていました。

**今後は初回の待機時間のみでストレスフリーなデータプレビューが可能になります。**:clap:

ユースケース
* これまでは簡単には難しかったレコード単位でのデータ検証
* Custom Transformでコードを用いたデータ変換を行う際のデバッグなど
<br><br><br>

↓以下はネガティブな内容のまとめです
* エディターが重くなる？
    内部的には全体の処理をオンメモリで持っているため？か各ノードの名前変更などの些細な変更であってもかなり重いときがあります。私の場合は使用しているデータは数百KBにも関わらず、データソース：S3の名前をcustomer_dataに変えるキーボード入力が数秒後に反映されるほどにガックガクでした。。
　　
* 料金の増加
    基本料金自体はそれなりにします。AWS 公式の料金計算例https://aws.amazon.com/jp/glue/pricing/
    を参照するとデータプレビューのセッション中はジョブ実行と同じ料金/DPUが発生します。デフォルトのDPU設定では時間あたり約2.2USD(オハイオ)となり、これに加えてRDSやS3などからのデータ転送量が別途追加されます。