
AWS Glueで簡単なETL処理を実装してみる

IT技術

はじめに
配属プロジェクトでデータ分析基盤の構築をすることになり、AWS Glueを活用するため、キャッチアップしたものを個人的にアウトプットする記事となります。
Glueに入門したい人向けの記事でもありますので、さまざまな資料を参照しながらGlueのETL処理の流れを確認します。
AWS Glueとは
AWS Glueは、Amazon Web Services (AWS) が提供する 完全マネージド型のETL(抽出、変換、ロード)サービス です。複雑なデータ統合やデータ処理を簡素化するために設計されており、データを効率的に準備、変換、結合して分析可能な形にするために使用されます。
加工するCSVを準備
まずは変換/結合するデータを準備します。
今回はVSCodeで下記を入力し、ファイル>名前をつけて保存でCSV形式で保存しています。
1employee_id,name,age
2001, AAA,25
3002,BBB,'30'
4003,CCC,43
5004,DDD,35
6005,'EEE','51'
1employee_id,salary,department
2001,3800000,IT
3002,390万円, HR
4003,6800000,IT
5004,560万円, Marketing
6005,700万円,Sales
CSVをS3に保存する
AWSコンソールにログイン後、S3からバケット(オブジェクトの保存先)を作成します。

バケットを作成からバケット名を付け、ほかdefault設定で作成します。
次に作成したバケットを開き、アップロードから作成したCSVファイルをアップロードします。
CSVデータを加工する
ここでは実際にデータを加工していきます。先ほどのデータを見てもらうとわかる通り、データに不要な''がついていたり、データが重複していたり、salaryの表記が万円と0000が混ざっており計算できないなどの問題があります。
今回はノーコード・ローコードで開発できるAWS Glue Studio Visual ETLを使用します。
検索欄からAWS Glueと検索し、AWS Glue Studio > Create Job > Visual ETLを選択し実際に加工していきます。
追加されたAmazon S3をタップし,画面右のサイドバーから情報を追加していきます。
① nameを編集し、わかりやすい'従業員データ'とします。
② S3 URLにはバケットに追加したCSVファイルのURLを添付
注) URLはバケット>CSVファイル内の'S3 URI をコピー'から取得できます。
③ Data formatをCSVに設定
注) 年収データ(salary_data.csv)も同様に設定する
② 画面右のAuthor RecipeをタップしAdd stepから加工する項目を選択します。
③ employee_data.csvでは無駄な''を削除したいため、Removecustom valueを選択
④ 画像のように加工するカラムを選択し、custom valueの箇所に'を指定

⑤ 下部のapplyをクリック
⑥ previewで不要な''が削除されたことを確認する (ageカラムも同様)
⑦ 重複を削除するためDelete duplicate rowsをタップしapplyをクリック
⑧ Done authoring recipeをタップし加工を完了
年収データの加工
① 万円を0000に変更するため、Replace value or patternを選択
② 加工するカラムを選択し、Value to be replacedに’万円’を、Replace with valueに’0000’を指定
③ 下部のapplyをクリック
④ change data typeをタップしpriceカラムをstringからintegerに変更
⑤ Done authoring recipeをタップし加工を完了
データ結合
② 画像のようにnode parentsにそれぞれのデータのData Preparation Recipeを指定
③ left joinを選択し、Add conditionからそれぞれのデータのemployee_idを指定

previewでjoinできていることが確認できたら、このデータを再度S3に保存するように設定します。
④ 画面上部からジョブをsave (ジョブ名をつけておく)
⑤ バケットに保存先となるresult_dataフォルダを作成します。
⑥ 再度Glueに戻り、Add notesのTargetsからS3を選択
⑦ S3 Target Locationに2で作成したフォルダのURLを指定
⑧ formatをCSVに指定
ジョブの実行
Glueの画面右上のRunからジョブを実行します。
*私はIAMポリシーやロールなどの権限エラーが発生しましたが、ログが出るので適宜権限付与してください🙇♂️
ジョブの実行が成功すると画像のようになります。
QuickSightでの可視化
まずS3へのアクセス権限を付与する。
① [Manage QuickSight (QuickSight の管理)] を選択
② サイドバーから[Security & permissions (セキュリティとアクセス権限)] を選択した後に、[管理] をクリック
③ 画像のようにS3からアクセスを許可するバケットを指定する
可視化の流れは以下の通りです。
① 画面上部の検索欄からQuickSightを検索して開く
② サイドバーのマイフォルダをクリックし新しいフォルダを作成する
③ QuickSightへデータを取り込むためのマニュフェストファイルをVSCode等で作成する
1{
2 "fileLocations": [
3 {
4 "URIPrefixes": [
5 "s3://clue-demo-001/result_data/"
6 ]
7 }
8 ],
9 "globalUploadSettings": {
10 "format": "CSV",
11 "delimiter": ",",
12 "containsHeader": "true"
13 }
14 }
④ ②で作成したフォルダから'+新規'をクリックし、データセット > S3を選択
⑤ データソース名にはジョブの名前、マニフェストファイルのアップロードでは3で作成したJSONのパスを指定。すると以下のようにデータセット作成の完了と表示されるかと思います。
⑥ 垂直積み上げ棒グラフを選択し、x軸にname、y軸にsalaryとすることで以下のようにデータを可視化することができます。
最後に
私自身AWS-SAAとDEAを持っているのでGlueの機能などはざっくり把握していたのですが、いざ触ってみてと言われると恥ずかしながら何をすべきかわかりませんでした。しかしこのハンズオンキャッチアップをすることで、Redshiftとの連携は今回は実施しなかったのですが、全体の流れを大まかに理解することができました。
長い記事になってしまいましたが、最後までご覧いただきありがとうございました。
参考
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/what-is-glue.html
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ

2024年4月から入社いたしました。24歳の道産子、櫻田と申します。 日々学び、いち早く戦力になれるよう精進してまいりますのでどうぞよろしくお願いいたします。趣味はNBA観戦と音楽を聴くことです。
おすすめ記事

PDFを分割、結合しよう

2025.03.07