Amazon Web Services ブログ

Amazon Athena を使用した SageMaker ノートブックからの SQL クエリの実行方法

インターネットの登場以来、データの肥大化、高速化、多様化が進んでいます。多くの企業は、この「ビッグデータ」の管理という問題を抱えており、「ビッグデータ」を解釈して、最適な結果を生み出すことに苦戦しています。データの収集、保存、共有、分析、可視化を難しくしている原因として、企業におけるデータのサイロ化、途切れることのない多種多様なフォーマットのデータ流入、テクノロジーを取り巻く環境の絶え間ない変化が挙げられます。それでは、データストアに接続する堅牢なデータパイプラインを構築し、データからインサイトを取得できるようなプラットフォームをデータサイエンティストやエンジニアに提供するにはどうすればよいでしょうか。

データストアの一元化に投資する企業が増えつつあります。また、 Amazon Simple Storage Service (S3) をデータレイクとして使用することのメリットが理解されるようになってきました。データレイクに接続するデータパイプラインを構築する場合、データディスカバリープロセスが必要になります。このプロセスには、データフォーマットおよびスキーマの識別、データのカタログ化、テーブル定義作成のためのメタデータの把握、データをクエリするための機能の提供が含まれます。

本ブログ記事では、データパイプライン構築に要する全ステップをご紹介します。Amazon S3 のデータを対象としたクローラーの作成、データディスカバリーおよびカタログ化のための AWS Glue の使用から、テーブルメタデータを保存および取得するための Amazon Athena の使用、Athena テーブルに対してクエリを実行するための Amazon SageMaker の使用まで、さまざまなステップをカバーします。

Amazon SageMaker はエンドツーエンドの機械学習 (ML) プラットフォームであり、AWS 上で機械学習モデルの構築、トレーニング、デプロイに使用できます。このサービスには高度なモジュール方式が採用されており、各コンポーネントは組み合わせても単体でも使用できるようになっています。Amazon SageMaker ノートブックモジュールを使用すれば、データをローカルに取り込む際に発生するレイテンシーを抑えて、データ操作の効率性を向上させることができます。それでは、Amazon SageMaker の Jupyter ノートブックコンポーネントを使用して、Athena との統合とデータフレームへの入力を行い、データ操作を実現する方法をご説明します。

本ブログ記事では例として、航空会社の定時運行に関する 2008 年のデータセットを使用します。このデータセットは、1987 年 10 月から 2008 年 4 月までの米国内の全民間航空便を対象としており、各フライトの発着に関する詳細な情報で構成されています。このデータはまず Amazon S3 にアップロードし、AWS Glue と Athena で使用できようにし、次に Amazon SageMaker で使用できるようにします。

AWS Glue によるデータディスカバリー

AWS Glue のデータカタログ機能と Amazon S3 への内蔵統合機能により、データ識別のプロセスと発見したデータからスキーマ定義を導き出すプロセスがシンプル化されます。データカタログ内で AWS Glue クローラーを使用すると、Amazon S3 に保存されたデータをトラバースし、データカタログ内で定義されたメタデータテーブルを構築することができます。

テーブル定義を保持するデータベースの定義が、データカタログへの入力の第一ステップとなります。

  1. AWS Glue コンソールで、[データベースの追加] を選択します。データベース名を入力して、[作成] を選択します。
  2. 次に、AWS Glue クローラーを作成して、作成したデータベースにテーブルを追加します。クローラーは Amazon S3 内のデータをクロールして、データベースにテーブル定義を追加します。
  3. データストアを選択します。以下に表示されている URL が Amazon S3 に保存されているデータへの URL です。次に、[次へ] を選択します。
  4. IAM ロールについては、Amazon S3 内のファイルへのアクセス権限を AWS Glue に付与し、そのファイルの暗号化権限を持つロールを新しく作成する必要があります。
  5. [次へ] を選択し、[頻度] で [オンデマンドで実行] を指定して、クローラーのスケジュールを設定します。
  6. 次に、ステップ 1 で作成したデータベースを選択します。
  7. ここまでのステップを確認して、[完了] を選択します。これで、クローラーが実行可能な状態になりました。[今すぐ実行しますか?] を選択します。これで、Amazon S3 内のデータのテーブル定義が作成されます。

Athena を使用した Amazon S3 データのクエリ

Athena では、標準 SQL インターフェイスを使用して Amazon S3 内のデータをクエリします。AWS Glue データカタログを使用することで、インタラクティブなクエリの作成、さらにそれ以降の処理に必要なデータ操作の実行が可能になります。Amazon Athena コンソールでは、AWS Glue カタログ内のデータベースとテーブルが自動的に反映されます。AWS マネジメントコンソールにログインして、Amazon Athena コンソールに移動するだけで、ここまでに作成したデータベースとテーブルが [クエリエディタ] に表示されます。

右上にある [設定] ボタンを選択して、ステージングディレクトリを必ず控えておいてください。Amazon Athena はクエリ結果を S3 バケットに保存します。S3 バケットは Amazon SageMaker が Athena に対してクエリを実行する次のステップで必要になります。

Amazon SageMaker を使用したデータの分析と管理

Amazon SageMaker の Jupyter ノートブックインスタンスでテーブル定義を利用可能にすることが、このデータパイプライン構築の最後のステップとなります。Jupyter ノートブックは一般的に、データの可視化、統計的分析の実行、データ操作、機械学習作業向けのデータ準備を行うデータサイエンティストによって使用されています。

  1. Amazon SageMaker コンソールで、[ノートブックインスタンスの作成] を選択します。
  2. [ノートブックインスタンスの設定] で、ノートブックインスタンス名を入力し、インスタンスタイプを選択します。次に、Amazon SageMaker のノートブックインスタンスが Amazon S3 とやり取りする際のデフォルトのロールを選択します。
  3. ノートブックインスタンスが作成され、[ステータス] が [InService] になるまで待ちます。
  4. [オープン] リンクを選択すると、ブラウザの別ウィンドウでノートブックのインターフェイスが開きます。
  5. [New] から [Terminal] をクリックすると、ターミナルウィンドウが開きます。クエリ認証のために、AWS 認証情報ファイルを更新する必要があります。
  6. ユーザーの認証情報およびリージョンを指定して、AWS 認証情報ファイルを更新します。ベストプラクティスとして、ある一定の期間をすぎると失効する一時的な認証情報を使用することを推奨します。
  7. [New] をクリックして、Jupyter に新しいノートブックを作成します。Amazon SageMaker は、Python 2 および 3、MXNet、TensorFlow、PySpark のサポートを含む Jupyter 向けカーネルを提供します。本日のエクササイズでは、Pandas ライブラリに組み込まれている Python をカーネルとして選択します。ノートブックで次のコマンドを実行して、Athena JDBC ドライバーをインストールします。PyAthena は、Amazon Athena JDBC ドライバー向けに Python DB API 2.0 (PEP 249) と互換性を持つクライアントです。
    import sys
    !{sys.executable} -m pip install PyAthena

  8. Athena ドライバーがインストールされると、JDBC 接続を使用して Athena に接続し、Pandas データフレームに入力できるようになります。データサイエンティストのデータ作業は一般に、データのマンジングおよびクリーニング、データの分析およびモデリング、次にプロットに適したフォームや表形式への分析結果の変換といった複数のステージに分かれます。こういったタスクには Pandas が理想的なツールです。
    from pyathena import connect
    import pandas as pd
    conn = connect(s3_staging_dir='<ATHENA QUERY RESULTS LOCATION>',
                   region_name='<YOUR REGION, for example, us-west-2>')
    
    df = pd.read_sql("SELECT * FROM athenaquery.<YOUR TABLE NAME> limit 8;", conn)
    df

まとめ

本ブログ記事でご説明したソリューションは、受信データがデータストアに入力されると自動的にカタログ化する方法です。このソリューションでは、データをクエリしてデータの操作や分析を行うこともできます。本手法はさらに、データからインサイトを導き出して、そこから大きな事業成果をもたらすために、特色あるエンジニアリング、トレーニング、スコアリングを通じて ML モデルをもっと創出するステージを設定します。


今回のブログ投稿者について

Anjana Kandalam はアマゾン ウェブ サービスのソリューションズアーキテクトで、ニューヨーク近郊を拠点にしています。 彼女はクラウドベースのテクノロジーで可能となるソリューションを用いて、金融業界のエンタープライズカスタマーの事業目標達成を支援しています。仕事以外では旅行を愛し、子どもたちとアウトドアで過ごす時間を大切にしています。