この記事について
こちらは 求ム!Pythonを使ってAzureで開発する時のTips!【PR】日本マイクロソフト Advent Calendar 2020 19 日目の記事です。
この記事では、Azure Cosmos DB
で Python を使って何かする時のアレコレについてまとめています。
Azure Cosmos DB Python SDK
SQL API で構築された Azure Cosmos DB に Python で接続するには、Azure Cosmos DB Python SDK を使用することになります。
こちらのライブラリについては、PyPI で公開されているので、使用する際は一度確認してみてください。
パッケージの導入は、以下のコマンドで完了できます。
pip install azure-cosmos
Docker 上で Azure Cosmos DB Python SDK を使用
Docker Compose を使用して、Docker コンテナー内で Azure Cosmos DB Python SDK をインストールし、利用することもできます。
以下のような docker-compose.yaml
を作成し、docker-compose up -d
でコンテナーを起動します。
version: '3'
services:
app:
image: python:3.9
container_name: python3
tty: true
volumes:
- ./src:/home/src
- ./pip-lib:/pip-lib
working_dir: "/home/src"
environment:
PYTHONUSERBASE: /pip-lib
src
フォルダ以下に、requirements.txt
を作成します。このファイル内に pip freeze の仕様に従って、使用するライブラリ情報を記載していきます。
Azure Cosmos DB Python SDK の場合は、以下の通りです。
azure-cosmos==4.2.0
requirements.txt
ファイルを作成したら、以下のコマンドを実行して、Azure Cosmos DB Python SDK をインストールします。
docker-compose run --rm app pip install -r requirements.txt --user
コマンドを実行すると、pip-lib
フォルダ内に requirements.txt で指定したライブラリがインストールされるはずです。
以下のように pip list
を実行すれば、インストールされていることも確認できるはずです。
docker-compose run --rm app pip list
こうすることで、Infrastructure as a Code (IaC) として、開発環境を Docker で管理、統一できるのでオススメです。
あとは、実際に Python で開発を始めるだけです。
PyPI や、Microsoft Docs のチュートリアル に、接続方法やデータの読み書きについての記載があるため、こちらを参考に Python アプリケーションを開発していきます。
Azure Cosmos DB Jupyter Notebooks
2020 年 5 月 に開催された Microsoft Build にて、Cosmos DB のデータエクスプローラーに Jupyter Notebooks 環境が組み込めるようになり、より簡単にデータ分析などを実施できるようになりました。
Azure Cosmos DB アカウント作成時に、Notebooks 機能を有効にする必要があります。
なお、2020 年 12 月 19 日現在では、Jupyter Notebooks 機能はプレビュー機能のため、有効化できるリージョンに制限があります。
※日本では、東日本リージョン、西日本リージョン、どちらでも有効化できるので、あまり気にする必要はないです。
この Jupyter Notebooks 機能の便利なところは、使い慣れた Jupyter Notebook と同じ形で操作を行うことができること以外に、Jupyter Notebook のセル内で SQL も実行できるというのがあります。
また、Azure Cosmos DB の Jupyter Notebooks では、先述の Azure Cosmos DB Python SDK
のバージョン 4 が一緒に組み込まれており、開発環境を構築しなくても、そのまま簡単に利用を始めることができます。
%%sql --database <データベース名> --container <コンテナー名>
SELECT c.Action, c.Price as ItemRevenue, c.Country, c.Item FROM c
このような形で、セル内で SQL を使って、Azure Cosmos DB の中にあるデータを参照することができるため、機械学習など、Python でのコーディングを行う際の実データ確認が楽になります。
無論、Pandas DataFrame
に、SQL の実行結果を出力させることもできます。
%%sql --database <データベース名> --container <コンテナー名> --output df_cosmos
SELECT c.Action, c.Price as ItemRevenue, c.Country, c.Item FROM c
df_cosmos.head(10)
このように、%%sql
の引数に --output
を追加することによって、同じ Jupyter Notebook 上で、SQL クエリの実行結果をそのまま Pandas DataFrame に投入することもできます。
おわりに
Azure Cosmos DB は NoSQL データベースのサービスです。実際にデータは溜め込むだけではなく、そこからさまざまな用途に活用していくことが重要です。
是非、Python SDK や Jupyter Notebooks 機能を活用して、Python で気軽にデータ活用を初めてみてください。
参考情報
- クイック スタート:Azure Cosmos DB SQL API アカウントを使用して Python アプリケーションを構築する
- SQL API 用の Azure Cosmos DB Python SDK:リリース ノートとリソース
- Azure Cosmos DB に組み込まれている Jupyter Notebook のサポート (プレビュー)
- Azure Cosmos DB アカウントのノートブックを有効にする (プレビュー)
- Azure Cosmos DB の Python ノートブックで組み込みのノートブック コマンドと機能を使用する (プレビュー)
- dockerのpythonコンテナをビルドしなおさずpip installでライブラリを更新できるようにする方法