AWS Glueに入門してみた
はじめに
配属プロジェクトでデータ分析基盤の構築をすることになり、AWS Glueを活用するため、キャッチアップしたものを個人的にアウトプットする記事となります。
Glueに入門したい人向けの記事でもありますので、さまざまな資料を参照しながらGlueのETL処理の流れを確認します。
AWS Glueとは
AWS Glueは、Amazon Web Services (AWS) が提供する 完全マネージド型のETL(抽出、変換、ロード)サービス です。複雑なデータ統合やデータ処理を簡素化するために設計されており、データを効率的に準備、変換、結合して分析可能な形にするために使用されます。
加工するCSVを準備
まずは変換/結合するデータを準備します。
今回はVSCodeで下記を入力し、ファイル>名前をつけて保存でCSV形式で保存しています。
employee_id,name,age
001, AAA,25
002,BBB,'30'
003,CCC,43
004,DDD,35
005,'EEE','51'
employee_id,salary,department
001,3800000,IT
002,390万円, HR
003,6800000,IT
004,560万円, Marketing
005,700万円,Sales
CSVをS3に保存する
Glueで加工するデータを読み込めるようにまずはそれらをS3に保存します。
AWSコンソールにログイン後、S3からバケット(オブジェクトの保存先)を作成します。
バケット名を付け、ほかdefault設定で作成します。
次に作成したバケットを開き、アップロードから作成したCSVファイルをアップロードします。
CSVデータを加工する
ここでは実際にデータを加工していきます。先ほどのデータを見てもらうとわかる通り、データに不要な''がついていたり、データが重複していたり、salaryの表記が万円と0000が混ざっており計算できないなどの問題があります。
今回はノーコード・ローコードで開発できるAWS Glue Studio Visual ETLを使用します。
Visual ETLをクリックし開始します。
-
Add notesのSourcesからS3を選択し2個用意します。
追加されたAmazon S3をタップし画面右からemployee_data.csvの読み込みを例に編集します。- nameを編集し、わかりやすい'従業員データ'とします。
- S3 URLにはバケットに追加したCSVファイルのURLを添付します。
- Data formatをCSVに設定
*年収データ(salary_data.csv)も同様に設定する
-
加工開始
- 加工対象のS3をタップ後、Add notesからData Preparation Recipeをタップ
- 画面右の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をタップし加工を完了
データ結合
次に、加工したemployee_data.csvとsalary_data.csvのデータを結合します。
- Add notesのTransformsからjoinを選択
- 画像のように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等で作成する
{
"fileLocations": [
{
"URIPrefixes": [
"s3://clue-demo-001/result_data/"
]
}
],
"globalUploadSettings": {
"format": "CSV",
"delimiter": ",",
"containsHeader": "true"
}
}
- 2で作成したフォルダから'+新規'をクリックし、データセット > S3を選択
- データソース名にはジョブの名前、マニフェストファイルのアップロードでは3で作成したJSONのパスを指定。すると以下のようにデータセット作成の完了と表示されるかと思います。
- 垂直積み上げ棒グラフを選択し、x軸にname、y軸にsalaryとすることで以下のようにデータを可視化することができます。
最後に
私自身AWS-SAAとDEAを持っているのでGlueの機能などはざっくり把握していたのですが、いざ触ってみてと言われると恥ずかしながら何をすべきかわかりませんでした。しかしこのハンズオンキャッチアップをすることで全体の流れを大まかに理解することができました。同時にRedshiftやBIツールとの連携はまだできていないのでまだまだ学習が必要だなと思いました。
非常に長い記事になってしまいましたが、最後までご覧いただきありがとうございました。
参考
Discussion