AWS Glue DataBrewジョブを実行してRedshift Serverlessに直接書き込んでみた

2022.08.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どーもsutoです。

Redshift ServerlessがGAされたということで、AWS Glue DataBrewでデータ整理を行うジョブを実行してRedshift Serverlessに直接出力してみようと思います。

従来のProvisioned InstanceのRedshiftクラスターと同様に、Redshift ServerlessにもJDBC、ODBCのエンドポイントがありますので問題なく接続できると思いますが、実際に本ブログで検証してみます。

Redshift Serverlessの作成

以下のブログの手順を従ってRedshift Serverlessの名前空間とワークグループを作成しました。

  • また、DatabrewジョブがRedshift Serverlessへ接続するために「DatabrewのJDBC接続設定に適用するセキュリティグループ」が必要になりますので、以下のように事前に作成しておいてください。

DataBrewデータセットを作成

今回はこちらのmockデータを使用して、売上として有効な注文(金額が0ドルより大きい注文)のみを抜き出したデータテーブルを作成してRedshift Serverlessに書き込むDatabrewジョブを実行させます。

  • 上記リンクから取得したデータセットをS3バケットに保存します。

  • DataBrew コンソールの [データセット] ページで、 新しくデータセット[order]を作成します。パラメータは以下画面の通りです。

DataBrewプロジェクトを作成し、変換レシピを構築

  • DataBrew コンソールの [プロジェクト]ページで、 [プロジェクトの作成] を行います。

  • プロジェクトのIAMロールは、今回はわかりやすくするために新規作成をしていますが、データセットを保存したS3バケットに対して ListBucket , GetObject許可と ポリシー AWSGlueDataBrewServiceRole があればOKなので、既存のロールがあるならばそちらを設定してもかまいません。

プロジェクト画面の準備ができたらレシピを作成していきます。

  • まずテーブルに不必要なカラムを削除するため、[列] メニューで、[削除] を選択します。

  • すると右側にソース列を選択する欄が表示されるので、 order_id , timestamp , transaction_date を選択して[適用]を選択します。

  • 次に [フィルター]メニューから[条件別]→[次より大きい]を選択します。

  • ソース列に amaount を選択し、値に 0 を入力して[適用]を選択します。

  • ここまで完了したらレシピの発行アイコンを選択してレシピを保存します。

DataBrew レシピ ジョブを実行

  • プロジェクト画面の右上にある[ジョブを作成]を選択します。

  • ジョブ作成画面でジョブ名を入力します。

  • 下へスクロールし、[出力先]をRedshift Serverlessに設定します。[参照]を選択して[JDBC接続を追加]を選択します。

  • Redshiftのエンドポイント等の情報を入力していき、[接続を作成]を選択します。

  • ※セキュリティグループは事前に作成した「DatabrewのJDBC接続設定に適用するセキュリティグループ」をここで選択してください。

  • Redshiftに出力する際のテーブル名を[スキーマ名.テーブル名]のかたちで入力します。最終的に以下のような出力設定となります。

  • ジョブ実行IAMロールは、今回以下のように新規作成しますが、こちらも既存のIAMロールがある場合はそちらを使ってもかまいません。

  • [ジョブの作成と実行]を選択して、ジョブが完了するまで待ちます。

Redshift Serverlessで確認

  • ジョブ完了後、Redshiftのクエリエディタv2でテーブルを確認してみました。

まとめ

Databrewでデータのクレンジングや加工処理をしつつ、Redshift Serverlessに直接出力する手順でした。

データレイク→S3、データクレンジング→Databrew、DWH→Redshift Serverlessという各コンポーネントをサーバレスで実装することができました。

さらにデータ処理のパイプラインにEvent Bridge、StepFunctionsを利用することができますのでデータ分析のための一連の処理を組み立てられそうです。