🐕

AWS WranglerとPyAthenaの設定・活用備忘録

2025/01/24に公開

AWS WranglerとPyAthenaの設定・活用備忘録

AWS Wranglerは、AWSのデータサービスとPythonの間のギャップを埋める便利なライブラリです。特にAthenaやGlue、S3などを効率的に操作する際に非常に有用です。本記事では、AWS Wranglerの基本的なセットアップ方法から、PyAthenaとの併用、閉域網環境での設定方法、そしてそれぞれの使用用途についてまとめます。


目次

  1. AWS Wranglerとは?
  2. 環境のセットアップ
    • AWS Wranglerのインストール方法(インターネット環境/閉域網)
  3. AWS Wranglerの使い方
    • Athenaのクエリ実行
    • S3とのデータ連携
  4. PyAthenaの使い方
    • PyAthenaとは
    • Athenaへの接続とクエリ実行
  5. それぞれの使用用途
    • AWS Wranglerの使用用途
    • PyAthenaの使用用途
  6. 閉域網環境での工夫
    • インストールパッケージの事前準備
    • VPCエンドポイントの利用
  7. 終わりに

1. AWS Wranglerとは?

AWS Wranglerは、Amazonの各種データサービスをPythonで簡単に扱うためのライブラリです。特に以下のような機能を提供します:

  • Amazon AthenaでのSQLクエリ実行
  • S3上のファイルの読み書き
  • Glueカタログの操作
  • RedshiftやDynamoDBとの統合

公式ドキュメント:AWS Data Wrangler


2. 環境のセットアップ

AWS Wranglerのインストール方法

インターネット環境でのインストール

pip install awswrangler

閉域網環境でのインストール

閉域網環境では、必要なパッケージを事前にインターネット環境でダウンロードし、閉域網環境に転送する必要があります。

  1. インターネット環境で以下のコマンドを実行して必要なファイルを取得します。
    pip download awswrangler
    
  2. .whlファイルなどの依存パッケージを閉域網環境にコピーします。
  3. 閉域網環境でインストールします。
    pip install --no-index /path/to/yourpackages awswrangler
    

3. AWS Wranglerの使い方

Athenaのクエリ実行

AWS Wranglerを使ったAthenaクエリの実行例です。

import awswrangler as wr
import boto3

# セッションの作成
session = boto3.Session(region_name="ap-northeast-1")

# クエリの実行
query = "SELECT * FROM your_table LIMIT 10;"
database = "your_database"
s3_output = "s3://your-output-bucket/"

result = wr.athena.read_sql_query(
    sql=query,
    database=database,
    s3_output=s3_output,
    boto3_session=session
)

print(result)

4. PyAthenaの使い方

PyAthenaとは

PyAthenaは、Athenaに接続してSQLクエリを実行するためのPythonライブラリです。AWS Wranglerよりもシンプルな操作が可能です。
公式ドキュメント:PyAthena

Athenaへの接続とクエリ実行

from pyathena import connect
import pandas as pd  # データフレームとして結果を扱う場合に必要

# Athenaに接続
conn = connect(
    s3_staging_dir="s3://xxxxxxxxx/",
    region_name="ap-northeast-1"
)

# クエリ実行
query = "SELECT * FROM your_table LIMIT 10;"
df = pd.read_sql(query, conn)
print(df)

5. それぞれの使用用途

AWS Wranglerの使用用途

  1. ETL処理の効率化

    • S3上のファイルをParquetやCSVとして入出力する際に便利です。
    • GlueカタログやRedshiftなど多様なAWSデータサービスと連携した一連の処理をPythonコードで完結できます。
  2. AWSサービスを幅広くカバー

    • DynamoDBやRedshiftなど、Athena/S3以外のAWSサービスにも対応しています。
    • 複数のサービス間でのデータ連携をスムーズに行いたい場合に最適です。

PyAthenaの使用用途

  1. 純粋なSQL操作の実行

    • Athenaに対するシンプルなクエリ実行を行う場合、PyAthenaはコードも短く手軽です。
    • SQLの結果を pandas.read_sql で取得できるため、データフレームへの取り込みが簡単です。
  2. 軽量なPythonクライアントとして

    • 余計な機能を必要とせず「Athenaへのクエリと結果取得」が中心の場合はPyAthenaが適しています。
  3. ライブラリサイズを抑えたい場合

    • AWS Wranglerよりも依存ライブラリが少ないため、特に閉域網環境でインストール対象を減らしたいシーンに向いています。

6. 閉域網環境での工夫

インストールパッケージの事前準備

インターネット環境で必要なライブラリをすべてダウンロードし、閉域網環境に転送します。依存パッケージまで含めて正しく取得・転送しておくことが重要です。

VPCエンドポイントの利用

AthenaやS3へ閉域網からアクセスするには、PrivateLink(VPCエンドポイント)の利用が便利です。リージョンごとにサービス名が異なる場合があります。マネジメントコンソールやドキュメントを必ず確認してください。

  • Athenaエンドポイント

    • サービス名: com.amazonaws.<region>.athena
  • S3エンドポイント

    • サービス名: com.amazonaws.<region>.s3

注釈: <region> には ap-northeast-1us-east-1 など、使用中のリージョンを指定します。


7. 終わりに

AWS WranglerとPyAthenaを活用することで、AthenaやS3の操作が大幅に効率化されます。

  • AWS Wrangler: 多岐にわたるAWSサービスとの統合やETLに強みがあり、データ処理を一括で済ませたい場面で役立ちます。
  • PyAthena: Athenaに対するシンプルなSQLクライアントとして、クエリと結果取得に特化した場面で重宝します。

参考

LambdaでBoto3/Pandasを使うのをやめて、awswrangler(aws-sdk-pandas)を使いましょう - Yuta NakataのBlog

PythonでAthenaにクエリする #awswrangler - Qiita

Discussion