LoginSignup
5
0

More than 1 year has passed since last update.

ローカル環境のJupyterLabからAthenaにクエリしたい

Last updated at Posted at 2021-12-10

自分が初めてPythonを触った時、Jupyter Notebookには大変お世話になりました。

そんな感謝の一方で、AWS re:Invent 2021ではSageMaker Studio Labが発表されてJupyter環境がまた注目されているなーというにわか心もあったので、JupyterLabの使い方を考えてみました。

機械学習しなくても、手元でJupyterLabを使い始めることが目的です。

前提

[packages]
aws-mfa = "*"
jupyter = "*"
jupyterlab = "*"
pyathena = "*"
pandas = "*"

[requires]
python_version = "3.8"

JupyterLabの関連パッケージインストール

割愛しても良かったのですが、、JupyterLabに関しては公式ガイドの通りワンライナーでインストール可能です。

pipenv install jupyterlab

むしろaws-mfaを使っていることが個人的にはポイントです。
ローカル環境を便利に使いたいのは当然ですが、認証情報も保護したいためMFA設定は大前提でした。

aws-mfa~/.aws/**の認証情報プロファイルをもとにAWS STSが発行する一時トークンを受け取り、アプリ(AWS SDK)にMFA認証を仲介するような動作です。

自分の環境では環境変数AWS_PROFILEを設定済みだったので、本当にインストールする以外は準備なしでした。

JupyterLab起動

pipenv環境に入ってからjupyter labを実行すると、デフォルトブラウザが起動するのでそのままログインします。
01_JypyterLab.png

from IPython.lib import passwd
passwd()

ちなみに上記メソッドを実行するとコンソールパスワードをすぐ設定できるので、検討の余地ありです。

Athenaにクエリ実行

pyathenaの基本通り、試しにクエリを実行するとMFA認証が効いていることが分かります。

from pyathena import connect

cursor = connect(s3_staging_dir="s3://aws-athena-query-results-{account_id}-ap-northeast-1/jupyter/",
                 region_name="ap-northeast-1").cursor()
cursor.execute('SELECT * FROM "athena_cur_billing"."billing" limit 10;')
print(cursor.description)
print(cursor.fetchall())

02_Athena_query.png

実行結果

レスポンス冒頭はテーブル定義でした。
03_query_result.png

クエリ結果をAthenaコンソールと同じように見たい

その場合はpandasを使うと簡単でした。
Jupyter環境でもAthena APIを実行しているため、s3_staging_dirバケットから実行結果ファイル(csv)を取得してopen&出力でも良いのですが、分析作業を繰り返したい場合はpandasが便利そうです。

実行結果

04_query_result.png

クエリ結果がすぐ分かる点はやっぱり魅力的です。
boto3を使ってS3から実行結果ファイル(csv)も取得すれば、分析結果をさらに整形したり、ローカル保存したりすることも可能です。

今後の使い方(願望)

JupyterLab環境はコードとしてリポジトリ管理可能なため、複数人での環境共有もできます。
また、個人的にJupyterLabの好きなところはコードと同じページにMarkDownやLaTeXを混ぜて記述できることです。仕事をきれいにまとめる仕組みがあるとモチベーションも維持できて、レポート形式で作成すればエンジニア以外にも受けが良さそうなフォーマットも可能なんじゃないかと期待してます。

今回のお試し手順をPDF出力した例はこちら。
05_jupyter_report.png

参考記事

Connect Jupyter with Amazon AWS Athena
https://myresearchworks.wordpress.com/tag/jupyter-notebook/

Jupyter Notebook でとりあえず Redash へクエリを投げておけばデータソースはなんでも良い状態にする
https://techlog.voyagegroup.com/entry/2017/06/30/185015

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0