SageMaker Unified StudioでS3→Glue→Athenaのデータ分析をシームレスに実現する

SageMaker Unified StudioでS3→Glue→Athenaのデータ分析をシームレスに実現する

目次

    はじめに

    デジタルエンジニアリング部の田中です。

    今回は、Amazon SageMaker Unified Studio(以下、SageMaker Unified Studio)を活用したデータ分析および各種機能について検証を行いました。

    SageMaker Unified Studioとは、機械学習に特化した統合環境で、データの管理・カタログ化をはじめ、ETL、モデルの作成・分析までを一貫して実施できるプラットフォームです。
    複数のAWSサービスが統合されているため、各サービスへ個別にアクセスする必要がなく、ひとつの画面上で分析に必要な操作を完結できる点が大きな特徴です。
    実際に自分で使用してみて、従来のようなサービス間の複雑な設定が不要で、シームレスに分析作業を進められる点がとても扱いやすいと感じました。

    本記事では、SageMaker Unified Studioを用いて複数のAWSサービスを組み合わせた分析の進め方や各種搭載機能について紹介します。

    検証の概要

    今回の目的

    • SageMaker Unified Studioに統合されている各種AWSサービスを用いてデータ分析を行う。
    • インターフェースに搭載されている各種機能について理解する。

    検証内容

    今回は、SageMaker Unified Studioで「どのようなことができるのか」という観点から、実際に検証した内容を順に解説します。

    複数のAWSサービスを用いた素早い分析が可能

    冒頭でも触れたとおり、SageMaker Unified Studioは、分析に必要な各種AWSサービスを単一の画面から呼び出せるインターフェースとなっています。
    そのため、サービス間の複雑な連携設定を意識することなく、即座に分析作業を開始できます。

    今回は、SageMaker Unified Studio上から、複数のサービスを組み合わせて以下の検証を行いました。

    • S3にデータをアップロードする
    • Glueでデータをカタログ化する
    • Athenaでクエリを実行し、データ分析を行う

     

    S3にデータをアップロードする

    Filesメニューを開き検証を行います。

    後のカタログ化ではS3のディレクトリ(プレフィックス)単位で1つのテーブルとして扱うため、テーブルとしてまとめたい単位で分けておく必要があります。
    今回は、販売実績データを分析する想定のもとで検証を実施します。

    「Actions」→「Create folder」と進んで「販売実績」ディレクトリを作成します。

    202605_sagemaker_unified_studio_seamless_02

    次に、こちらのディレクトリに対してデータを配置します。

    左の欄にあるエクスプローラから「販売実績」フォルダを選択後、「Actions」→「Upload Files」と進んで、あらかじめ準備しておいた販売実績の検証用ファイルをアップロードします。

    202605_sagemaker_unified_studio_seamless_03

    なお、このファイルは後ほど紹介するJupyterLabを使ったバイブコーディング機能によって生成したもので、以下のようなデータ構成になっています。

    id item_name category location amount demand time_stamp
    1 帽子 衣料品 名古屋 224 85 2023-06-18 00:00:00
    2 カレンダー 文具 福岡 104 421 2023-10-14 00:00:00
    3 ノート 文具 札幌 94 468 2023-04-30 00:00:00
    4 冷蔵庫 家電 福岡 1023 234 2023-01-19 00:00:00
    5 消しゴム 文具 横浜 102 74 2023-03-28 00:00:00
               

    また、Filesメニューではプロジェクトバケット(ドメインに付属するS3バケット)に対して操作を行っています。
    別のS3バケットにアクセスしたい場合は、Dataメニューを開き「S3 buckets」タブから該当バケットを参照・操作してください。

    Glueでデータをカタログ化する

    Dataメニューを開き検証を行います。

    ここでは、先ほどアップロードしたデータをGlueにてカタログ化していきます。
    「S3 buckets」タブを選択後、エクスプローラにて「販売実績」ディレクトリを選択します。
    「Actions」→「Create table from contents」と進んで、カタログ情報を作成します。
    必要に応じて、カラム名および型を変更してください。

    202605_sagemaker_unified_studio_seamless_04

    完了したら、「Catalogs」タブでカタログが作成できたことを確認します。

    202605_sagemaker_unified_studio_seamless_05

    販売実績テーブルが作成されたことが分かります。

    Athenaでクエリを実行し、データ分析を行う

    Query Editorメニューを開き、検証を行います。

    ここでは、作成したテーブルに対してSQLを発行し、データの分析をしていきます。
    クエリを記述して実行することで、データを取得・分析できます。
    今回は試しに、商品ごとの売上を集計するSQLを発行しました。

    202605_sagemaker_unified_studio_seamless_06

    また、結果はグラフ化やCSV形式でのダウンロードも可能です。

    最後にSageMaker Data Agentを活用した自然言語での問い合わせ(Text-to-SQL)を実施します。
    本アシスタントは、SageMaker Unified Studioを活用する際のデータ分析に特化したAIアシスタントです。
    画面上部の紫色のアイコンをクリックしてアシスタントを起動し、確認したい内容をチャットに入力すると、対応するSQLを自動生成してくれます。

    202605_sagemaker_unified_studio_seamless_07

    いかがでしたでしょうか。
    AWSリソース間を個別に設定する必要がなく、シームレスに分析できる点をご理解いただけたかと思います。
    今回はいくつかのサービスを抜粋して例としましたが、ほかにもさまざまなサービスが統合されており、用途に応じたサービスを使うことで、より効率的な検証・分析が可能です。

    SageMaker Unified Studioに統合されている主なサービス

    分類 サービス
    BI可視化 Amazon QuickSight
    データ加工・分析 AWS Glue / Amazon EMR / Amazon Athena
    AI・ML開発 Amazon SageMaker AI / Amazon Bedrock / Amazon Q Developer
    データ基盤 Amazon S3 / Amazon Redshift / Amazon DataZone
    ワークフロー Amazon MWAA
    開発ツール AWS CodeCommit
     

    JupyterLabベースの開発環境が利用可能

    SageMaker Unified Studioで利用可能な機能の一つとして、JupyterLabがあります。

    JupyterLabとは、Webブラウザ上でPythonなどのコードを実行できる次世代の統合開発環境です。
    SageMaker Unified Studio上から起動可能で、Notebook環境であることから、コードを記述後すぐに実行して結果を確認できるのが大きな特徴です。

    JupyterLab自体は従来のSageMaker Studioにも搭載されていたため、開発環境は元々利用可能でした。
    しかし特筆すべき点として、本サービス内でJupyterLabを利用する場合、自然言語の指示に基づいてコード生成や補助を行うAIアシスタント(Amazon Q Developer)を活用したバイブコーディングが可能です。

    本アシスタントを利用することで、プログラミングに関する専門知識がない人でも、日常会話のような感覚で問い合わせすることで手軽にデータ分析などを行えます。

    202605_sagemaker_unified_studio_seamless_01

    ※実際の利用画面

    補足

    無駄な稼働によるコスト発生を防ぐために、AWS側でJupyterLabの自動停止機能が用意されています。アイドル時には自動でスペースが停止されるため、不要な課金の心配がありません(デフォルト1時間)。

    画面上部の「Configure space」から設定画面を開き、「Idle time」よりアイドル時間を変更できます。

    ワークフロー作成によるジョブ管理が可能

    ワークフローを利用すると、個別に作成したETLや分析処理などの一連の処理を連結して実行することができます。
    検証ではETLによる加工処理を作成後、JupyterLabにて予測モデル・分析処理を作成し、それらをワークフローでパイプライン化して実行しました。

    今回はこちらのAWSが公開しているハンズオンに沿って、気温・降水量・風速などの気象データをもとに灌漑予測を行うワークフローを作成します。

    大まかな手順は以下のとおりです。

    • 気象データをS3にアップロード
    • ETL処理で気象データを加工
    • JupyterLab上で灌漑予測処理を作成
    • ワークフローにて加工および灌漑予測を連結して実行

    解説を踏まえつつ、ハンズオンの内容を紹介します。

    気象データをS3にアップロード

    Filesメニューを開き、検証を行います。
    まずは、プロジェクトバケットに以下のディレクトリを作成します。

    ディレクトリ 役割
    raw_data ETL加工前のデータ配置
    processed_data ETL加工後の出力先

    ハンズオン記事より、気象データ(synthetic_weather_hourly_data.csv)をダウンロード後、raw_dataディレクトリにアップロードします。

    202605_sagemaker_unified_studio_seamless_08


    ETL処理で気象データを加工

    Visual ETLメニューを開き、検証を行います。
    「Create job」よりETL作成画面を開きます。
    ここでは、ノードを配置してエッジでつなぐことで、データ加工・ソートなどの処理を連結するジョブを作成します。

    202605_sagemaker_unified_studio_seamless_09

    基本的なフローは「入力 → 加工 → 出力」です。
    扱うノードの種類は以下のとおりです。

    • Data sources:入力元のリソース
    • Transforms:加工・フィルタ・ソートなどの処理
    • Data targets:出力先のリソース

    スペースの任意の場所を「右クリック」→「Add node」と進んで、ノード追加ウィンドウを開きます。
    Data sourcesタブより「Amazon S3」を配置し、そのノードを選択して設定を開きます。

    ここでは、入力元となるS3ファイルパスの指定およびフォーマット設定などを行います。
    以下のとおり設定してください。

    項目
    S3 URI S3の気象データファイルパス(/shared/raw_data/synthetic_weather_hourly_data.csv
    Format CSV
    Delimiter - optional ,
    Escape - optional (ブランク)
    Quote - optional (ブランク)
    Multiline 無効
    Header 有効
    Infer schema 無効
    Recursive file lookup 無効


    202605_sagemaker_unified_studio_seamless_010
    ※「Data preview」でノード通過時点の状態を確認することができます。

    設定後、ノード右端の「+」ボタンを押して、ノード追加ウィンドウを開きます。
    Transformsタブより「Change columns」を配置し、そのノードを選択して設定を開きます。

    ここでは、CSVデータのカラムを扱いやすくするため、列名の変更やデータ型のキャストを行います。
    以下のキャストを追加してください。

    Source column Target column Type
    temperature_2m (°C) temperature_celsius float
    precipitation (mm) precipitation_mm float
    rain (mm) rain_mm float
    windspeed_10m (km/h) windspeed float


    202605_sagemaker_unified_studio_seamless_11

    設定後、ノード右端の「+」ボタンを押して、ノード追加ウィンドウを開きます。
    Transformsタブより「SQL query」を配置し、そのノードを選択して設定を開きます。

    ここでは、気温の単位変換(摂氏 → 華氏)をはじめ、その他気象データの加工を行います。
    以下の設定を追加してください。

    項目
    エイリアス名 myDataSource
    SQL 下記
    SELECT     MAKE_TIMESTAMP(2016, 1, day_of_year, hour, 0, 0) AS timestamp,     (temperature_celsius * 9 / 5) + 32 AS temp_f,     rain_mm * 25.4 AS rain_inches,     windspeed FROM {myDataSource} 


    202605_sagemaker_unified_studio_seamless_12

    設定後、ノード右端の「+」ボタンを押して、ノード追加ウィンドウを開きます。
    Data targetsタブより「Amazon S3」を配置し、そのノードを選択して設定を開きます。

    ここでは、加工データの出力先指定およびカタログ化を行います。
    以下のとおり設定してください。

    項目
    S3 URI S3の加工データ出力ディレクトリパス(/shared/processed_data/
    Format CSV
    Update catalog 有効
    Database sagemaker_sample_db
    Table weather_data
    Include header 有効
    Output to a single file 無効


    202605_sagemaker_unified_studio_seamless_13

    最後に、ワークフローにて作成したETL処理を呼び出せるように「Save」より名前を付けて保存します。
    以下のとおり名称を設定してください。

    項目
    JobName DataProcessing

    202605_sagemaker_unified_studio_seamless_14

    これにて、特定のS3バケット上のデータを加工し、別のS3バケットに出力する準備ができました。

    今回はS3を入出力リソースとして設定しましたが、その他さまざまなリソースを入出力として利用できます。
    対応リソースは以下のとおりです。

    • Amazon Redshift
    • Amazon S3
    • Amazon S3 Tables
    • AWS Glue Data Catalog
    • Amazon DocumentDB
    • Amazon DynamoDB
    • Google BigQuery
    • Microsoft SQL Server
    • MySQL
    • Oracle
    • PostgreSQL
    • Snowflake

     

    JupyterLab上で灌漑予測処理を作成

    JupyterLabメニューを開き、検証を行います。

    ここでは、加工済みのデータを分析するための処理を作成します。
    今回は、ハンズオン内で配布されているサンプル分析コード(CropIrrigationPrediction.ipynb)を使用します。
    同様の検証を行う場合は、各自ダウンロードをしてください。

    大まかな処理内容は以下のとおりです。

    1. データ取得
      Glueカタログに登録済みの天気データをAthenaで取得
    2. 灌漑必要量の作成
      日付から月を抽出
      天気や季節に応じて灌漑の必要度を決定
      0〜10のスケールで管理
    3. モデル作成
      温度・降水量・風速を使って灌漑必要度を予測する学習モデルを作成
    4. 予測
      いくつかの天気シナリオをモデルに入力
      高い/低い灌漑必要度に分類
    5. 結果保存
      予測結果をテキストにまとめてS3に保存 (/shared/output/results.txt

    本来は分析ファイルを自身で作成しますが、今回はアップロードするだけで完了です。
    JupyterLabを開き、スペース上部のアップロードアイコン(上矢印アイコン)から分析ファイルをS3にアップロードします。

    202605_sagemaker_unified_studio_seamless_15

    分析処理の準備が完了したため、開いているスペースは終了してください。

    ワークフローにて加工および灌漑予測を連結して実行

    Workflowsメニューを開き検証を行います。

    ここでは、ワークフローを用いて上記のETLと分析処理をパイプライン化します。
    本サービスにはAWS MWAAが統合されているため、そちらを用いてワークフローを作成していきます。

    この画面では、ノードを配置しエッジでつなぐことで、ETL・分析処理などを連結するジョブを作成できます。

    今回は、気象データを検知した場合にETL加工と分析を行うワークフローを作成し、実行します。
    大まかな手順は以下のとおりです。

    • 気象データ検知タスクの作成
    • ETL実行タスクの作成
    • 分析処理実行タスクの作成
    • ワークフローの作成および実行

     

    気象データ検知タスクの作成

    スペースの任意の場所を「右クリック」→「Add node」と進んで、ノード追加ウィンドウを開きます。
    「S3 Key Sensor」を配置し、そのノードを選択して設定を開きます。

    ここでは、入力元となるS3ファイルパスを指定およびフォーマット設定などを行います。
    以下のとおり設定してください。

    項目
    Task name 任意の名称
    Bucket key S3の気象データファイルパス(/shared/raw_data/synthetic_weather_hourly_data.csv


    202605_sagemaker_unified_studio_seamless_16

    ETL実行タスクの作成

    設定後、ノード右端の「+」ボタンを押して、ノード追加ウィンドウを開きます。
    「Data Processing Job / Glue Job Operator」を配置し、そのノードを選択して設定を開きます。

    ここでは、実行するETL加工処理を選択します。
    以下のとおり設定してください。

    項目
    Task name 任意の名称
    Operation type Choose an existing Glue job
    Job Name DataProcessing

    202605_sagemaker_unified_studio_seamless_17

    分析処理実行タスクの作成

    設定後、ノード右端の「+」ボタンを押して、ノード追加ウィンドウを開きます。
    「SageMaker Unified Studio Jupyter Notebook Operator」を配置し、そのノードを選択して設定を開きます。

    ここでは、実行する分析処理を選択します。
    以下のとおり設定してください。

    項目
    Task name 任意の名称
    Source CropIrrigationPrediction.ipynb


    202605_sagemaker_unified_studio_seamless_18

    ワークフローの作成および実行

    「Save」ボタンでワークフローを保存します。
    以下のとおり設定し、保存してください。

    項目
    Workflow name WeatherDataProcessingOrchestration
    Trigger Manual only

    ジョブのトリガーは手動かスケジュール形式で選択できますが、今回は手動で実行します。

    202605_sagemaker_unified_studio_seamless_19「Run」ボタンでワークフローを実行します。
    ジョブの状態は、画面上部の履歴アイコンより確認可能です。

    完了次第、S3(/shared/output/results.txt)に灌漑予測結果が出力されていることを確認します。

    202605_sagemaker_unified_studio_seamless_20

    今回はハンズオンのため結果予測はシンプルですが、季節ごとの灌漑推計のプロセスが正しく機能していることが分かります。

    手順ではファイルの検知からETL処理、分析までの一連のジョブを作成して検証しますが、ワークフローの設計は用途に応じて柔軟にカスタマイズ可能です。
    また、あるタスクから複数の後続タスクに分岐させることも可能です。

    以上、ワークフローについての解説でした。

    VSCodeからSSH接続が可能

    エンジニア向けの活用方法として、ローカルの使い慣れた環境(VSCode)からSageMaker Unified StudioへSSH接続し、分析を行うことも可能です。
    VSCodeにAWS Toolkitを導入することで、JupyterLabで行っていた作業をVSCode上から行えます。

    接続手順(SageMaker Unified Studio側)

    1. 「JupyterLab」を起動
    2. 「Configure Space」を選択
    3. 「Instance」からメモリ8GB以上のインスタンスを選択 ※リモートSSH接続には8GB以上が必要
    4. 「Remote Access」をON
    5. 設定を保存
    6. 「Open in local IDE」→「VSCode」を選択

    前提条件が整っていれば、自動でVSCodeが起動してSageMaker Unified Studioのインスタンスにアクセスします。

    202605_sagemaker_unified_studio_seamless_21

    前提条件

    • 認証情報が設定済みでawsコマンドが叩ける状態であること
    • 必要な拡張機能がインストール済であること
      • AWS Toolkit
      • Remote - SSH

    主なメリット

    • ローカルPCに高性能GPUがなくても、クラウドの計算環境を活用できる
    • SageMaker Unified Studio側で環境が用意されており、セットアップが最小限
    • VSCode拡張と連携した効率的な分析・検証が可能

    まとめ

    JupyterLabとAmazon Q Developerを組み合わせたバイブコーディングや、ワークフローによる一連処理の自動化など、多くの便利な機能を体験できました。
    特に印象的だったのは、複数のAWSサービスが1つのプラットフォームに統合されている点です。
    SageMaker Unified Studioを使うことで、リソース間の設定を意識せずにシームレスに扱える点が非常に便利で、従来の設定の手間が大きく省けると感じました。

    以上、SageMaker Unified Studioを活用した分析および検証でした。
    本記事が活用を検討されている方の参考になれば幸いです。

    アジアクエスト株式会社では一緒に働いていただける方を募集しています。
    興味のある方は以下のURLを御覧ください。