Amazon Athena経由でpandas DataFrameを作成するやり方をまとめます。
はじめに
こんにちは、@bioerrorlogです。
Amazon Athenaクエリ経由でpandas DataFrameを作成したい、としたらどのようなやり方があるでしょうか。
例えばいちばん愚直にやろうとすれば、boto3でAthenaクエリを発行し、クエリ結果からデータを取得して、上手いことpandasに読み込ませる...とかでしょうか。 そんな複雑なことやりたくないなぁと思って調べてみても、stackoverflowの上位answerでも似たような解決策が示されています。
しかしもう少し調べると、awswranglerを使えばかなりスッキリ書けることを知りました。
今回は、awswranglerを使ってAthena経由でpandas DataFrameを作成するやり方をメモします。
※追記:awswranglerはAWS SDK for pandasに改名されました(使い方は特に変わってない模様です)。
AWS Data Wrangler、いつの間にか名前がAWS SDK for pandas変わっていたのか
— BioErrorLog (@bioerrorlog) October 18, 2022
確かにこっちの方が分かりやすい名前だ
いろんなAWSサービスからpandas DataFrameがさっと作れる感が伝わるhttps://t.co/MSrVbLIoNF
awswrangler (AWS SDK for pandas)とは
awswranglerは、AWSサービスとpandasを連携するツールです。
AWS公式(awslabs)が開発しており、Athenaだけでなく各AWSのDB系サービスとの連携もサポートしています。
Pandas on AWS. Easy integration with Athena, Glue, Redshift, Timestream, OpenSearch, Neptune, QuickSight, Chime, CloudWatchLogs, DynamoDB, EMR, SecretManager, PostgreSQL, MySQL, SQLServer and S3 (Parquet, CSV, JSON and EXCEL).
Athena経由でpandas DataFrameを作成する
このawswranglerを使えば、次のように簡単にAthenaのクエリ結果をそのままpandas DataFrameに読み込ませることができます。
import awswrangler as wr df = wr.athena.read_sql_query(sql='SELECT * FROM "<table_name>"', database='<database_name>')
ちなみに上記のコードでは、Athena query resultの出力先を指定していません。
その場合はデフォルトでs3://aws-athena-query-results-ACCOUNT-REGION/
にquery resultが出力されますが、任意のS3を指定したければs3_output
から指定することができます。
その他athena.read_sql_query
の各オプションはドキュメントをご覧ください
おわりに
今回は、awswranglerを使ってAthena経由でpandas DataFrameを作成するやり方をメモしました。
素のboto3で書くよりもずっとシンプルに書くことができるので、なかなか使い勝手が良いのではないでしょうか。 awslabs公式のツールであることも嬉しいポイントです。
以上、どなたかの参考になれば幸いです。
[関連記事]
参考
Quick Start — AWS SDK for pandas 2.17.0 documentation
awswrangler.athena.read_sql_query — AWS SDK for pandas 2.17.0 documentation