AWS Glue DataBrew入門ガイド

記事タイトルとURLをコピーする

こんにちは!アプリケーションサービス部の濱岡です!

暑い日が続きますね。。。 皆様も熱中症には気をつけてくださいね。。。

今回はAWS Glue DataBrewについてブログを書きました。

AWS Glue DataBrewとは

AWS Glue DataBrewは、データの前処理(クリーニング、正規化、変換)のためのフルマネージド型のAWSサービスです。

一番の特徴は操作する記述コードがないという点です。 直感的なインターフェースでETL処理を行うことができます。 また、ジョブを作成することで定期的なETL処理の実装も可能です。

AWS Glue DataBrewの特徴

1. ビジュアルインターフェース

AWS Glue DataBrewは、コードを書くことなくデータを視覚的に操作できる直感的なインターフェースを提供しています。 この機能により、プログラミングスキルがなくてもETL処理の実装が可能です。

2. 多様なデータソースと接続が可能

Amazon S3、Amazon Redshift、Amazon RDSなどAWSのさまざまなデータソースからデータを取り込むことができます。 また、JDBCを利用して、JDBCがサポートしているデータベースやデータウェアハウスにも接続が可能です。

AWS Glue DataBrewの基本機能

プロジェクト

プロジェクトとは、データセットのクリーンアップや正規化などの変換に関するステップをまとめたレシピを作成するためのワークスペースです。 このプロジェクトを利用することでETL処理を「レシピ」として作成することができます。

また、このプロジェクト上ではデータセットからデータを取り込み、サンプルデータとして取り扱います。 そのサンプルデータに対して画面上でETL処理を操作できます。

プロジェクトの画面上でETL処理を適用しても、実際のデータには影響はでませんので何回でも試すことができます。

レシピ

一連のデータ前処理操作を「レシピ」として保存し、再利用することができます。 jsonまたはyml形式でダウンロード、json形式でアップロードも可能です。 (※アップロードはjson形式でしかできないので注意)

これにより、同じ処理を複数のデータセットに簡単に適用できます。

ジョブ

データセットに対してレシピを適用して変換処理を行うレシピジョブとデータセットの統計に関するプロファイルを作成するプロファイルジョブがあります。

レシピジョブは作成したレシピを実際に実行しテストをします。

プロファイルジョブは、データに関する統計の概要を調べて収集し、構造、コンテンツ、関係、および導出に関してデータを評価するものです。

どちらのジョブもデータソース自体に変更を加えることはなく、指定したAmazon S3へ結果を出力します。

AWS Glue DataBrewの使い方

Step 1: データセットの作成

まず、使用するデータセットを作成します。

DataBrewのコンソール画面へ移動して[データセット]を選択し、[新しいデータセットの接続]を押下します。

[新しいデータセットへの接続]では、接続したいデータソースを指定します。 画面ではAmazon S3のファイル名を直接指定していますが、ファイル名が一定ではない場合、パラメータを定義することで動的な値も指定が可能です。

例:親フォルダとそのサブフォルダ内の.csvで終わるファイルのみを選択する

your_bucket_path/<.*>.csv

[データセットを作成]を押下すると設定完了です。

Step 2: プロファイルジョブの実行

次に、データのプロファイルを生成し、データの概要や品質を把握します。これにより、データの欠損値や異常値を確認することができます。

[ジョブ]を押下し、[プロファイルジョブ]を選択します。

[ジョブを作成]を押下します。

「ジョブ入力」ではデータプロファイルを作成するデータセットを選択します。

「ジョブ実行サンプル」では、実行するサンプルデータの範囲を指定することができます。 プロファイルジョブはこのサンプルデータに対して実行することができます。

「ジョブ出力設定」ではジョブの実行結果の出力先を指定します。

「許可」でIAMロールを指定します。(ここで作成も可能です。)

[ジョブを作成し実行する]を押下するとジョブが実行されます。

ジョブを実行するとこのようにデータの概要を確認することができます。

Step 3: プロジェクトの作成

データプロファイルに基づき、データクリーニングを実行します。異常値の修正や欠損値の補完などを行います。

まずはプロジェクトを作成します。 [プロジェクト]から[プロジェクトの作成]を押下します。

[レシピの詳細]ではあらかじめ作成しているレシピを指定できます。

[データセットの選択]でETL処理を行うデータセットを選択します。

[許可]でIAMロールを指定します。(ここで作成も可能です。)

[プロジェクトを作成]を押下するとプロジェクトが作成されます。 作成まで少し時間がかかります。

(※プロジェクトの画面でデータがロードされるとセッションが開始され料金が発生します。)

この画面からデータの加工が可能です。 実際にどういうことができるかについては実践例で紹介します。

Step 4: レシピの作成

最後に、必要なデータ前処理操作をまとめたレシピを作成し、それをデータセットに適用します。

プロジェクトを開きます。 右側のレシピから[発行]を押下します。

[発行]を押下するとレシピが作成されます。

Step 5: レシピジョブの実行

プロジェクトの画面から[ジョブの作成]を押下します。 (コンソール画面の[ジョブ]を選択し、[ジョブを作成]からでも作成が可能です。)

ジョブの出力設定でどのAmazon S3バケットへどういう形式で出力するのかを選択できます。

ジョブ出力設定の右側にある[設定]を押下するとジョブ実行ごとに新しいフォルダを作成したり、ファイルを置き換えたりという設定も可能です。 また、出力するファイルを単一のファイルで出力するのか複数のファイルで出力するのかも指定が可能です。

[許可]でIAMロールを指定します。(ここで作成も可能です。) [ジョブを作成し実行する]を押下すると実行されます。

AWS Glue DataBrewを使った実践例

Use Case 1: データのフィルタリング

AWS Glue DataBrewを使って、データのフィルタリングが可能です。 今回はLocation(都道府県)を岡山県に絞ってみます。 [フィルター]から[条件別]の[次と等しい]を選択します。

ソース列にLocationを選び、岡山県を選びます。 [変更のプレビュー]で変更後のプレビューも可能です。 変更を適用する場合は、[適用]を押下します。

Use Case 2: 欠損値の処理

AWS Glue DataBrewは、データセット内の欠損値の処理も可能です。 今回は欠損している行を削除してみます。

[欠落しています]から[欠落した行を削除]を押下します。

BirthDateにNull値があるのでそれを削除します。 欠損値があるソース列を選択し、[欠落した値がある行を削除する]を選択します。 [変更のプレビュー]で変更後のプレビューも可能です。 変更を適用する場合は、[適用]を押下します。

Use Case 3: データの結合

AWS Glue DataBrewでは2つのデータセットを結合することも可能です。 今回は、Sex(性別)を男、女、不明と記載している別テーブルと結合してみます。 [結合]を押下します。 データセットを選択します。(今回はあらかじめデータセットを用意しておきました。)

[次へ]を押下します。

今回は内部結合をします。 結合するカラム名を選択し、列リストから必要なカラムを選択し、[終了]を押下します。

[結合されたテーブルのプレビュー]を押下すると適用する前にプレビューも可能です。

AWS Glue DataBrewのメリットとデメリット

AWS Glue Databrewのメリットとデメリットをまとめてみます。

メリット

  • ノーコードでETL処理
    • プログラミングの知識がなくても直感的なデータのクリーニングや変換が可能です。
  • データプロファイリング
    • データセットの統計情報を自動的に生成し、データの品質や異常値を迅速に確認できます。
  • 豊富な変換機能
    • 250以上の変換機能を提供しており、データのクリーニング、標準化、フォーマットの変更などを簡単に行えます。

デメリット

  • 複雑な変換処理は不得意な印象
    • 変換機能の種類は豊富ですが、複雑な変換が必要な場合は制約を感じることがあります。
    • 複数のデータセットを結合したり、ユニオンしたりが多くなってくるとデータセットの設計が複雑になります。
  • 学習コスト
    • 変換機能の種類が豊富な分、それに慣れるまでの学習コストはかかります。

AWS Glue DataBrewとAWS Glue Studio Visual ETLとの比較

AWS Glue にはETL処理で利用できるAWS Glue Studio Visual ETLがあります。 AWS Glue DataBrewと比較して、その違いをまとめてみました。

選択できるデータの違い

それぞれ選択できる入力のデータが変わってきます。

どちらも共通して、Amazon S3やAWS Glue データカタログ、Amazon Redshift、JDBCなどは選べます。

AWS Glue Data BrewではローカルのファイルやAmazon AppFlow、AWS Data Exchangeなども選べぶことができます。 逆にAWS Glue Visual ETL上では、Amazon KinesisやAmazon OpenSearch Serviceを選べるのが特徴的です。

データソースによって使い分ける方法もあるかもしれません。

ETL変換内容の出力の違い

AWS Glue DataBrewではレシピとしてjsonまたはyml形式で出力が可能で、json形式でのインポートも可能です。 一方、AWS Glue Studio Visual ETLでは、データの変換内容をコードで表示が可能です。

データの加工について

AWS Glue DataBrewはデータのクレンジングには強い印象で、GUI上で簡単にできます。 ただ、データの結合については、AWS Glue Visual ETLの方がVisualとして表現されるため、みやすい印象です。

AWS Glue DataBrewはプロファイルジョブを利用してクレンジングを主に、Glueではテーブルの結合を中心とする処理をするなど使い分けることもできるのかなと感じました。

AWS DataBrewで必要なIAMロールの権限について

AWS DataBrewではプロジェクトを利用する際とジョブを利用する際に必要になります。 プロジェクトやジョブを作成する際に画面で自動的に作成されますが、自分でIAMロールを作成する方向けに自動的に作成される際に付与される権限を記載します。

まず、加工したいデータがあるS3バケットに対して以下の権限が付与されます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::S3バケット名/*",
                "arn:aws:s3:::S3バケット名"
            ],
            "Effect": "Allow"
        }
    ]
}

また、加工結果を出力するS3バケットに対して以下の権限が付与されます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::S3バケット名/*",
                "arn:aws:s3:::S3バケット名"
            ],
            "Effect": "Allow"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::S3バケット名/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

まとめ

AWS Glue DataBrewは、直感的にETL処理を作成できるツールです。 プログラミングができない方でも簡単に利用ができます。 まだ使ったことがない方は、ぜひ試してみてください。

以上、濱岡でした!

はまおか(執筆記事の一覧)

アプリケーションサービス部

プログラムを書くことが好きです