다음을 통해 공유


빠른 시작: Python용 Apache Cassandra용 Azure Cosmos DB 클라이언트 라이브러리

Python용 Azure Cosmos DB for Apache Cassandra 클라이언트 라이브러리를 시작하여 구조화되지 않은 데이터를 저장, 관리 및 쿼리합니다. 이 가이드의 단계에 따라 새 계정을 만들고, Python 클라이언트 라이브러리를 설치하고, 계정에 연결하고, 일반적인 작업을 수행하고, 최종 샘플 데이터를 쿼리합니다.

API 참조 설명서 | 라이브러리 소스 코드 | 패키지(PyPI)

필수 조건

  • Azure 구독

    • Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.
  • Azure Cloud Shell에서 최신 버전의 Azure CLI입니다.

    • CLI 참조 명령을 로컬로 실행하려면 명령을 사용하여 Azure CLI에 로그인합니다 az login .
  • Python 3.12 이상

설치

먼저 이 가이드에 대한 계정 및 개발 환경을 설정합니다. 이 섹션에서는 계정을 만들고 자격 증명을 얻은 다음 개발 환경을 준비하는 프로세스를 안내합니다.

계정 만들기

먼저 Apache Cassandra 계정에 대한 API를 만듭니다. 계정이 만들어지면 키스페이스 및 테이블 리소스를 만듭니다.

  1. 대상 리소스 그룹이 아직 없는 경우 이 명령을 사용하여 az group create 구독에 새 리소스 그룹을 만듭니다.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. az cosmosdb create 명령을 사용하여 기본 설정으로 Apache Cassandra용 새 Azure Cosmos DB 계정을 만듭니다.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableCassandra"
    
  3. az cosmosdb cassandra keyspace create을 사용하여 cosmicworks라는 새 키스페이스를 생성합니다.

    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. cassandra-driver PyPI(Python 패키지 인덱스)에서 패키지를 가져옵니다.

    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. 이 가이드의 앞부분에서 수집된 자격 증명에 대한 문자열 변수를 만듭니다. 변수 username, password, 및 contactPoint의 이름을 지정하십시오.

    username = "<username>"
    password = "<password>"
    contactPoint = "<contact-point>"
    
  5. SSLContext을(를) 구성하려면, ssl_context이라는 새 변수를 만들고, 프로토콜을 PROTOCOL_TLS_CLIENT로 설정하며, 호스트 이름 확인을 비활성화하고, 확인 모드를 CERT_NONE로 설정합니다.

    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")
    

경고

인증을 간소화하기 위해 이 가이드에서는 TLS(전체 전송 계층 보안) 유효성 검사를 사용할 수 없습니다. 프로덕션 배포의 경우 유효성 검사를 완전히 사용하도록 설정합니다.

데이터 Upsert

다음으로 새 데이터를 테이블에 업서트합니다. Upserting은 동일한 데이터가 테이블에 이미 있는지 여부에 따라 데이터를 적절하게 만들거나 바꿉니다.

  1. 새 행을 삽입하기 위해 CQL(Cassandra Query Language) 쿼리로 명명된 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. 동일한 readQuery 필드가 있는 항목과 일치하는 CQL 쿼리를 사용하여 명명된 id 새 문자열 변수를 만듭니다.

    readQuery = "SELECT * FROM product WHERE id = %s LIMIT 1"
    
  2. 이 가이드의 앞부분에서 만든 제품과 동일한 값으로 명명된 id 문자열 변수를 만듭니다.

    id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
    
  3. execute 함수를 사용하여 readQuery에 저장된 쿼리를 실행하고, id 변수를 인수로 전달합니다. readResults라는 변수에 결과를 저장합니다.

    readResults = session.execute(readQuery, (id,))
    
  4. 함수를 one 사용하여 예상된 단일 결과를 가져옵니다. 이 단일 결과를 변수 matchedProduct에 저장합니다.

    matchedProduct = readResults.one()
    

쿼리 데이터

마지막으로 쿼리를 사용하여 테이블의 특정 필터와 일치하는 모든 데이터를 찾습니다.

  1. CQL 쿼리와 필수 매개 변수를 사용하여 findQuerycategory라는 문자열 변수를 생성하세요.

    findQuery = "SELECT * FROM product WHERE category = %s ALLOW FILTERING"
    category = "gear-surf-surfboards"
    
  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>"

다음 단계