• トップ
  • ブログ一覧
  • AWS Glueで簡単なETL処理を実装してみる
  • AWS Glueで簡単なETL処理を実装してみる

    ロン(エンジニア)ロン(エンジニア)
    2025.03.26

    IT技術

    はじめに

    配属プロジェクトでデータ分析基盤の構築をすることになり、AWS Glueを活用するため、キャッチアップしたものを個人的にアウトプットする記事となります。
    Glueに入門したい人向けの記事でもありますので、さまざまな資料を参照しながらGlueのETL処理の流れを確認します。

    AWS Glueとは

    AWS Glueは、Amazon Web Services (AWS) が提供する 完全マネージド型のETL(抽出、変換、ロード)サービス です。複雑なデータ統合やデータ処理を簡素化するために設計されており、データを効率的に準備、変換、結合して分析可能な形にするために使用されます。

    加工するCSVを準備

    まずは変換/結合するデータを準備します。
    今回はVSCodeで下記を入力し、ファイル>名前をつけて保存でCSV形式で保存しています。

    ・employee_data.csv

    1employee_id,name,age
    2001, AAA,25
    3002,BBB,'30'
    4003,CCC,43
    5004,DDD,35
    6005,'EEE','51'
    ・salary_data.csv

    1employee_id,salary,department
    2001,3800000,IT
    3002,390万円, HR
    4003,6800000,IT
    5004,560万円, Marketing
    6005,700万円,Sales

    CSVをS3に保存する

    Glueで加工するデータを読み込めるようにまずはそれらをS3に保存します。
    AWSコンソールにログイン後、S3からバケット(オブジェクトの保存先)を作成します。
    S3コンソール画面
    バケットを作成からバケット名を付け、ほかdefault設定で作成します。
    次に作成したバケットを開き、アップロードから作成したCSVファイルをアップロードします。

    CSVデータを加工する

    ここでは実際にデータを加工していきます。先ほどのデータを見てもらうとわかる通り、データに不要な''がついていたり、データが重複していたり、salaryの表記が万円と0000が混ざっており計算できないなどの問題があります。
    今回はノーコード・ローコードで開発できるAWS Glue Studio Visual ETLを使用します。

    検索欄からAWS Glueと検索し、AWS Glue Studio > Create Job > Visual ETLを選択し実際に加工していきます。

    Glue画面

    上の画像の画面が開かれると思いますので早速実装を開始します。

    1. ソースの準備Add notesのSourcesからS3を選択し2個用意
    追加されたAmazon S3をタップし,画面右のサイドバーから情報を追加していきます。
    ① nameを編集し、わかりやすい'従業員データ'とします。
    ② S3 URLにはバケットに追加したCSVファイルのURLを添付
    注) URLはバケット>CSVファイル内の'S3 URI をコピー'から取得できます。
    ③ Data formatをCSVに設定
    注) 年収データ(salary_data.csv)も同様に設定する

    2. 加工開始① 加工対象のS3をタップ後、Add notesからData Preparation Recipeをタップ
    ② 画面右のAuthor RecipeをタップしAdd stepから加工する項目を選択します。
    ③ employee_data.csvでは無駄な''を削除したいため、Removecustom valueを選択
    ④ 画像のように加工するカラムを選択し、custom valueの箇所に'を指定
    Glue 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を指定
    Glue Leftjoin画面
    previewでjoinできていることが確認できたら、このデータを再度S3に保存するように設定します。
    ④ 画面上部からジョブをsave (ジョブ名をつけておく)
    ⑤ バケットに保存先となるresult_dataフォルダを作成します。
    ⑥ 再度Glueに戻り、Add notesのTargetsからS3を選択
    ⑦ S3 Target Locationに2で作成したフォルダのURLを指定
    ⑧ formatをCSVに指定

    ジョブの実行

    Glueの画面右上のRunからジョブを実行します。

    *私はIAMポリシーやロールなどの権限エラーが発生しましたが、ログが出るので適宜権限付与してください🙇‍♂️
    ジョブの実行が成功すると画像のようになります。
    Job成功画面

    QuickSightでの可視化

    まずS3へのアクセス権限を付与する。
    ① [Manage QuickSight (QuickSight の管理)] を選択
    ② サイドバーから[Security & permissions (セキュリティとアクセス権限)] を選択した後に、[管理] をクリック
    ③ 画像のようにS3からアクセスを許可するバケットを指定する
    Manage QuickSightアクセス権限画面

    可視化の流れは以下の通りです。
    ① 画面上部の検索欄から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

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    ロン(エンジニア)
    ロン(エンジニア)
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background