Glue Studio を使って、商品コード変換をやってみる

# はじめに

Glue Studio を使ってデータ加工のしてみたいと思います。どんなデータ加工をするのかというと、次の画像の感じです。

![image-20230811230142558.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/938915d8-2803-4db1-8fe8-1057b5ef7ef2.png)



「部品データ」に、部品を表すコードと名前が存在しています。このコードを変換したいと思います。変換のルールは「コード変換ルール」に存在しています。この 2 つを掛け合わせて、変換後部品データを作ります。

この変換は、Glue Studio 上で JOIN で結合すると簡単に実現できます。手順を見ながらやってみましょう。



# データの準備

以下の csv データを S3 Bucket に準備します。Glue Studio としては、RDS や Redshift 等でも良いですが、一番手軽に準備できる csv を用意します。

buhin.csv

```
buhin,name
0001,部品A
0002,部品B
0003,部品C
0004,部品D
0005,部品E
```



codetransform.csv

```
before,after
0001,aaaa
0002,bbbb
0003,cccc
0004,dddd
0005,eeee
```



S3 Bucket に csv データをアップロードしました。

![image-20230811231946950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e22dbe6d-3bba-8945-e03b-b98bbde7be9d.png)



# Glue Studio データ加工フローの作成

AWS Glue の画面を開いて、Virtual ETL を選択します。

![image-20230811232105097.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/17242c87-c2a7-18a3-242c-16cd6e4fe62a.png)



Visual with a source and target を選択して、Create を押します。

![image-20230811232140163.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3fb59c0c-bf83-0b63-0c0c-77956e85d603.png)



デフォルトで用意されているフローを GUI で編集する画面にきりかわりました。

![image-20230811232211745.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/32855f03-feb0-1977-1833-e870a061d168.png)



データソースを定義できます。元から配置されている S3 Bucket を選択して、格納した csv データを指定します。

![image-20230811232712933.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/8ec344d5-0743-ca40-a7e2-8e049785c473.png)



2 つのデータを結合したいので、+ ボタンをおします。

![image-20230811232731836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a94cca2b-bd38-00c2-bb45-079a525051a8.png)



Data の Source から Amazon S3 を選択します。

![image-20230811232801199.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e93cbb4a-0f29-dacd-d25a-2b4f9c707d09.png)



結合したいデータを選択します。また、テンプレートで存在していた使わないボックスは削除しました。

![image-20230811232955009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b697830e-f4c5-46c4-ffe8-53a04f632f0e.png)



2 つのデータを結合したいので、JOIN を選択します。

![image-20230811233035476.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f755acce-5be9-fcf3-7314-f31dc049290f.png)



Outer Join を選択します。また、どの列を結合の条件するかも選択できます。buhin と before で結合します。

![image-20230811233324337.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/127683a0-9336-9369-0d7f-f08ccfec6991.png)



Data preview を押すと、現在のフローの結果が計算され、結合されている状況が見えます。buhin と before を結合したので、同じコードを表す列が 2 つあります。

![image-20230811233525968.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/c0bbc4c4-bac7-e2e0-3114-7f1da793a9b7.png)



before 列は不要なので、Drop Fields のboxを配置して、before を選択します。

![image-20230811233810618.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/febf3384-9ec6-9335-ec0f-5a35f999da57.png)





Preview を見ると、before が消えました。

![image-20230811233926850.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/6f3454e2-3990-b457-1498-b7c2c5cdf98d.png)



Rename Field で after の名前を変更します。

![image-20230811234047138.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/0931d0d1-3c13-f93b-70bc-c890f6144484.png)



bufin_converted という名前に変わりました。

![image-20230811234058375.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/014bbf76-25e5-2974-cdc9-aa340a77d401.png)



その後、保存する先の Target を選択します。今回は、Amazon S3 にしておきます。

![image-20230811234130801.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/14c27f50-2dc9-422a-2cac-65157fce8a39.png)



保存先の csv データの詳細を指定します。csv のまま保存することもできますし、Parquet 形式などにもできます。今回はシンプルに格納します。(Partition Key を指定して格納も出来そうでした。)

![image-20230811234354956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f6297d96-c9f9-5987-24d4-53959a80ab32.png)



Job details を選択します。

![image-20230812001822759.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/64e28c65-afb9-7732-3517-1131a907ab42.png)



worker 数を 10 から 2 に変更します。

![image-20230812001920595.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/62a5a382-89b7-91b9-41c0-778536e28763.png)



Save を押します。

![image-20230812002016889.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/595c60dd-b6a1-c069-0fa9-a5fd64bfd55f.png)



# ジョブの実行

Run ボタンを押すと、実際にジョブを実行できます。

![image-20230811234515165.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/2d35cc21-eb7e-ef71-d64a-0b1dff19d588.png)



ジョブ実行の進捗具合がわかります。

![image-20230811234547174.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3e7e5471-e33f-943f-4c08-f70aa323e36d.png)



実行時間 1 分ほどで完了します。

![image-20230811234844313.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/fcfeba5b-7ffa-2ab6-3a43-baadd5114d14.png)



S3 にデータ加工結果が、複数のファイルに分割されて保存されています。

![image-20230812002800598.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/84d92351-00ea-c6d2-0fef-137fbdf94b52.png)



きちんと加工されていました。

![image-20230812011103975.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b3f02e7c-9fc4-13e1-9471-9abf4d933619.png)