Python 用 Azure Cosmos DB for Apache Cassandra クライアント ライブラリを使用して、非構造化データの格納、管理、クエリを実行します。 このガイドの手順に従って、新しいアカウントの作成、Python クライアント ライブラリのインストール、アカウントへの接続、一般的な操作の実行、最終的なサンプル データのクエリを実行します。
API リファレンス ドキュメント | ライブラリのソース コード | パッケージ (PyPI)
[前提条件]
Azure サブスクリプション
- Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure Cloud Shell の Azure CLI の最新バージョン。
- CLI 参照コマンドをローカルで実行する場合は、
az login
コマンドを使用して Azure CLI にサインインします。
- CLI 参照コマンドをローカルで実行する場合は、
- Python 3.12 以降
セットアップ中
まず、このガイドのアカウントと開発環境を設定します。 このセクションでは、アカウントの作成、資格情報の取得、開発環境の準備のプロセスについて説明します。
アカウントを作成する
まず、Apache Cassandra アカウント用の API を作成します。 アカウントが作成されたら、キースペースとテーブル リソースを作成します。
ターゲット リソース グループがまだない場合は、
az group create
コマンドを使用して、サブスクリプションに新しいリソース グループを作成します。az group create \ --name "<resource-group-name>" \ --___location "<___location>"
az cosmosdb create
コマンドを使用して、既定の設定で新しい Azure Cosmos DB for Apache Cassandra アカウントを作成します。az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<___location>" \ --capabilities "EnableCassandra"
cosmicworks
という名前のaz cosmosdb cassandra keyspace create
を使用して、新しいキースペースを作成します。az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"
複数行の Bash コマンドを使用して、スキーマを表す新しい JSON オブジェクトを作成します。 次に、
az cosmosdb cassandra table create
コマンドを使用して、products
という名前の新しいテーブルを作成します。schemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )
az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
資格情報の取得
ここで、最近作成したアカウントへの接続を作成するために使用するクライアント ライブラリのパスワードを取得します。
az cosmosdb show
を使用して、アカウントの連絡先ポイントとユーザー名を取得します。az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"
前のコマンドの出力の
contactPoint
プロパティとusername
プロパティの値を記録します。 これらのプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する 連絡先ポイント と ユーザー名 です。az cosmosdb keys list
を使用して、アカウントのキーを取得します。az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"
前のコマンドの出力の
primaryMasterKey
プロパティの値を記録します。 このプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する パスワード です。
開発環境の準備
次に、新しいプロジェクトとクライアント ライブラリを使用して開発環境を構成します。 この手順は、このガイドの残りの部分に進む前に必要な最後の前提条件です。
空のディレクトリから開始します。
Python パッケージ インデックス (PyPI) から
cassandra-driver
パッケージをインポートします。pip install cassandra-driver
app.py ファイルを作成します。
オブジェクト モデル
説明 | |
---|---|
Cluster |
クラスターへの特定の接続を表します |
コード例
クライアントの認証
まず、このガイドで前に収集した資格情報を使用してクライアントを認証します。
統合開発環境 (IDE) で app.py ファイルを開きます。
cassandra-driver
モジュールから次の型をインポートします。cassandra.cluster.Cluster
cassandra.auth.PlainTextAuthProvider
from cassandra.cluster import Cluster from cassandra.auth import PlainTextAuthProvider
ssl
モジュールから次の型をインポートします。ssl.PROTOCOL_TLS_CLIENT
ssl.SSLContext
ssl.CERT_NONE
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
このガイドで前に収集した資格情報の文字列変数を作成します。 変数に
username
、password
、およびcontactPoint
という名前を付けます。username = "<username>" password = "<password>" contactPoint = "<contact-point>"
ssl_context
という名前の新しい変数を作成し、プロトコルをPROTOCOL_TLS_CLIENT
に設定し、ホスト名チェックを無効にして、検証モードをCERT_NONE
に設定して、SSLContext
を構成します。ssl_context = SSLContext(PROTOCOL_TLS_CLIENT) ssl_context.check_hostname = False ssl_context.verify_mode = CERT_NONE
前の手順で指定した資格情報を使用して、新しい
PlainTextAuthProvider
オブジェクトを作成します。 結果をauth_provider
という名前の変数に格納します。auth_provider = PlainTextAuthProvider(username=username, password=password)
前の手順で作成した資格情報と構成変数を使用して、
Cluster
オブジェクトを作成します。 結果をcluster
という名前の変数に格納します。cluster = Cluster([contactPoint], port=10350, auth_provider=auth_provider, ssl_context=ssl_context)
クラスターに接続します。
session = cluster.connect("cosmicworks")
Warnung
このガイドでは、認証を簡略化するために、トランスポート層セキュリティ (TLS) の完全な検証が無効になっています。 運用環境のデプロイでは、検証を完全に有効にします。
データをアップサートする
次に、新しいデータをテーブルにアップサートします。 アップサートにより、同じデータがテーブルに既に存在するかどうかに応じて、データが適切に作成または置換されます。
新しい行を挿入するための Cassandra クエリ言語 (CQL) クエリを使用して、
insertQuery
という名前の新しい文字列変数を作成します。insertQuery = """ INSERT INTO product (id, name, category, quantity, price, clearance) VALUES (%(id)s, %(name)s, %(category)s, %(quantity)s, %(price)s, %(clearance)s) """
新しい製品のさまざまなプロパティを持つ新しいオブジェクトを作成し、
params
という名前の変数に格納します。params = { "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "name": "Yamba Surfboard", "category": "gear-surf-surfboards", "quantity": 12, "price": 850.00, "clearance": False }
execute
関数を使用して、指定したパラメーターでクエリを実行します。session.execute(insertQuery, params)
データの読み取り
次に、テーブルにアップサートされたデータを読み取る。
同じ
id
フィールドを持つ項目と一致する CQL クエリを使用して、readQuery
という名前の新しい文字列変数を作成します。readQuery = "SELECT * FROM product WHERE id = %s LIMIT 1"
このガイドで前に作成した製品と同じ値を使用して、
id
という名前の文字列変数を作成します。id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
execute
関数を使用して、id
変数を引数として渡readQuery
に格納されているクエリを実行します。 結果をreadResults
という名前の変数に格納します。readResults = session.execute(readQuery, (id,))
one
関数を使用して、期待される単一の結果を取得します。 この 1 つの結果をmatchedProduct
という名前の変数に格納します。matchedProduct = readResults.one()
データのクエリを実行する
最後に、クエリを使用して、テーブル内の特定のフィルターに一致するすべてのデータを検索します。
findQuery
およびcategory
という名前の文字列変数を作成し、CQLクエリと必須パラメーターを設定します。findQuery = "SELECT * FROM product WHERE category = %s ALLOW FILTERING" category = "gear-surf-surfboards"
複数の結果を照会するには、2 つの文字列変数と
execute
関数を使用します。 このクエリの結果を、findResults
という名前の変数に格納します。findResults = session.execute(findQuery, (category,))
for
ループを使用して、クエリ結果を反復処理します。for row in findResults: # Do something here with each result
コードを実行する
アプリケーション ディレクトリのターミナルを使用して、新しく作成したアプリケーションを実行します。
python app.py
リソースをクリーンアップする
アカウントが不要になったら、リソースを削除して Azure サブスクリプションからアカウント を削除 します。
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"