次の方法で共有


クイック スタート: Python 用 Azure Cosmos DB for Apache Cassandra クライアント ライブラリ

Python 用 Azure Cosmos DB for Apache Cassandra クライアント ライブラリを使用して、非構造化データの格納、管理、クエリを実行します。 このガイドの手順に従って、新しいアカウントの作成、Python クライアント ライブラリのインストール、アカウントへの接続、一般的な操作の実行、最終的なサンプル データのクエリを実行します。

API リファレンス ドキュメント | ライブラリのソース コード | パッケージ (PyPI)

[前提条件]

  • Azure サブスクリプション

    • Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • Azure Cloud ShellAzure CLI の最新バージョン。

    • CLI 参照コマンドをローカルで実行する場合は、 az login コマンドを使用して Azure CLI にサインインします。
  • Python 3.12 以降

セットアップ中

まず、このガイドのアカウントと開発環境を設定します。 このセクションでは、アカウントの作成、資格情報の取得、開発環境の準備のプロセスについて説明します。

アカウントを作成する

まず、Apache Cassandra アカウント用の API を作成します。 アカウントが作成されたら、キースペースとテーブル リソースを作成します。

  1. ターゲット リソース グループがまだない場合は、 az group create コマンドを使用して、サブスクリプションに新しいリソース グループを作成します。

    az group create \
        --name "<resource-group-name>" \
        --___location "<___location>"
    
  2. 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"
    
  3. cosmicworksという名前のaz cosmosdb cassandra keyspace createを使用して、新しいキースペースを作成します。

    az cosmosdb cassandra keyspace create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. 複数行の 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"
    

資格情報の取得

ここで、最近作成したアカウントへの接続を作成するために使用するクライアント ライブラリのパスワードを取得します。

  1. az cosmosdb showを使用して、アカウントの連絡先ポイントとユーザー名を取得します。

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. 前のコマンドの出力の contactPoint プロパティと username プロパティの値を記録します。 これらのプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する 連絡先ポイントユーザー名 です。

  3. az cosmosdb keys listを使用して、アカウントのキーを取得します。

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. 前のコマンドの出力の primaryMasterKey プロパティの値を記録します。 このプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する パスワード です。

開発環境の準備

次に、新しいプロジェクトとクライアント ライブラリを使用して開発環境を構成します。 この手順は、このガイドの残りの部分に進む前に必要な最後の前提条件です。

  1. 空のディレクトリから開始します。

  2. Python パッケージ インデックス (PyPI) から cassandra-driver パッケージをインポートします。

    pip install cassandra-driver
    
  3. app.py ファイルを作成します。

オブジェクト モデル

説明
Cluster クラスターへの特定の接続を表します

コード例

クライアントの認証

まず、このガイドで前に収集した資格情報を使用してクライアントを認証します。

  1. 統合開発環境 (IDE) で app.py ファイルを開きます。

  2. cassandra-driver モジュールから次の型をインポートします。

    • cassandra.cluster.Cluster
    • cassandra.auth.PlainTextAuthProvider
    from cassandra.cluster import Cluster
    from cassandra.auth import PlainTextAuthProvider
    
  3. ssl モジュールから次の型をインポートします。

    • ssl.PROTOCOL_TLS_CLIENT
    • ssl.SSLContext
    • ssl.CERT_NONE
    from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
    
  4. このガイドで前に収集した資格情報の文字列変数を作成します。 変数に usernamepassword、および contactPointという名前を付けます。

    username = "<username>"
    password = "<password>"
    contactPoint = "<contact-point>"
    
  5. 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
    
  6. 前の手順で指定した資格情報を使用して、新しい PlainTextAuthProvider オブジェクトを作成します。 結果を auth_provider という名前の変数に格納します。

    auth_provider = PlainTextAuthProvider(username=username, password=password)
    
  7. 前の手順で作成した資格情報と構成変数を使用して、 Cluster オブジェクトを作成します。 結果を cluster という名前の変数に格納します。

    cluster = Cluster([contactPoint], port=10350, auth_provider=auth_provider, ssl_context=ssl_context)
    
  8. クラスターに接続します。

    session = cluster.connect("cosmicworks")
    

Warnung

このガイドでは、認証を簡略化するために、トランスポート層セキュリティ (TLS) の完全な検証が無効になっています。 運用環境のデプロイでは、検証を完全に有効にします。

データをアップサートする

次に、新しいデータをテーブルにアップサートします。 アップサートにより、同じデータがテーブルに既に存在するかどうかに応じて、データが適切に作成または置換されます。

  1. 新しい行を挿入するための 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)
    """
    
  2. 新しい製品のさまざまなプロパティを持つ新しいオブジェクトを作成し、 paramsという名前の変数に格納します。

    params = {
        "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "name": "Yamba Surfboard",
        "category": "gear-surf-surfboards",
        "quantity": 12,
        "price": 850.00,
        "clearance": False
    }
    
  3. execute関数を使用して、指定したパラメーターでクエリを実行します。

    session.execute(insertQuery, params)
    

データの読み取り

次に、テーブルにアップサートされたデータを読み取る。

  1. 同じid フィールドを持つ項目と一致する CQL クエリを使用して、readQueryという名前の新しい文字列変数を作成します。

    readQuery = "SELECT * FROM product WHERE id = %s LIMIT 1"
    
  2. このガイドで前に作成した製品と同じ値を使用して、 id という名前の文字列変数を作成します。

    id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
    
  3. execute関数を使用して、id変数を引数として渡readQueryに格納されているクエリを実行します。 結果を readResults という名前の変数に格納します。

    readResults = session.execute(readQuery, (id,))
    
  4. one関数を使用して、期待される単一の結果を取得します。 この 1 つの結果を matchedProduct という名前の変数に格納します。

    matchedProduct = readResults.one()
    

データのクエリを実行する

最後に、クエリを使用して、テーブル内の特定のフィルターに一致するすべてのデータを検索します。

  1. findQueryおよびcategoryという名前の文字列変数を作成し、CQLクエリと必須パラメーターを設定します。

    findQuery = "SELECT * FROM product WHERE category = %s ALLOW FILTERING"
    category = "gear-surf-surfboards"
    
  2. 複数の結果を照会するには、2 つの文字列変数と execute 関数を使用します。 このクエリの結果を、 findResultsという名前の変数に格納します。

    findResults = session.execute(findQuery, (category,))
    
  3. 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>"

次のステップ