분석 저장소 데이터를 분할하도록 사용자 지정 분할을 구성합니다.

적용 대상: NoSQL MongoDB Gremlin

사용자 지정 분할을 사용하면 분석 쿼리에서 일반적으로 필터로 사용되는 필드에서 분석 저장소 데이터를 분할할 수 있으므로 쿼리 성능이 개선됩니다. 사용자 지정 분할에 대한 자세한 내용은 사용자 지정 분할이란 문서를 참조하세요.

사용자 지정 분할을 사용하려면 Azure Cosmos DB 계정에서 Azure Synapse Link를 사용하도록 설정해야 합니다. 자세한 내용은 Azure Synapse Link를 구성하는 방법을 참조하세요. Azure Cosmos DB용 Azure Synapse 링크를 사용하여 Azure Synapse Spark Notebook에서 사용자 지정 분할 실행을 트리거할 수 있습니다.

참고 항목

사용자 지정 분할을 활용하려면 Azure Cosmos DB 계정에 Azure Synapse Link가 사용하도록 설정되어 있어야 합니다. 사용자 지정 분할은 현재 Azure Synapse Spark 2.0에서만 지원됩니다.

참고 항목

Gremlin API용 Synapse Link가 현재 미리 보기로 제공됩니다. Azure CLI를 사용하여 새 그래프 또는 기존 그래프에서 Synapse Link를 사용하도록 설정할 수 있습니다. 구성하는 방법에 대한 자세한 내용은 여기를 클릭하세요.

사용자 지정 분할 작업 트리거

Azure Synapse Link를 사용하여 Azure Synapse Spark Notebook에서 분할을 트리거할 수 있습니다. 하루에 한두 번 백그라운드 작업으로 실행되도록 예약하거나 필요한 경우 더 자주 실행할 수 있습니다. 데이터 세트에서 하나 이상의 필드를 분석 저장소 파티션 키로 선택할 수도 있습니다.

다음은 사용자 지정 분할 실행을 트리거하는 데 필요한 필수 구성 옵션입니다.

  • spark.cosmos.asns.execute.partitioning - 사용자 지정 분할 실행을 트리거하는 부울 값. 기본값은 false입니다.

  • spark.cosmos.asns.partition.keys - DDL 형식 문자열을 사용하는 파티션 키. 예: ReadDate 문자열.

  • spark.cosmos.asns.basePath - Synapse 기본 스토리지 계정의 분할된 스토리지에 대한 기본 경로.

참고 항목

여러 파티션 키를 선택하는 경우 키를 나타내는 basePath를 사용하여 동일한 분할된 저장소에서 이러한 레코드에 액세스할 수 있습니다.

다음은 사용자 지정 분할 실행을 트리거할 때 사용할 수 있는 선택적 구성 옵션입니다.

  • spark.cosmos.asns.merge.partitioned.files - 실행당 파티션 값당 단일 파일을 만들 수 있는 부울 값. 기본값은 거짓입니다.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile - 분할된 저장소의 단일 분할된 파일에 있는 최대 레코드 수. 이 구성과 spark.cosmos.asns.merge.partitioned.files가 지정된 경우 레코드 수가 maxRecordsPerFile 값을 초과하면 새 파일이 만들어집니다. 이 구성은 일반적으로 더 큰 컬렉션의 초기 분할에만 필요합니다. 기본값은 1,000,000입니다.

    maxRecordsPerFile을 설정했지만 spark.cosmos.asns.merge.partitioned.files를 구성하지 않으면 maxRecordsPerFile에 도달하기 전에 레코드가 여러 파일로 분할될 수 있습니다. 파일 분할은 또한 풀에서 사용 가능한 병렬 처리에 따라 다릅니다.

  • spark.cosmos.asns.partitioning.shuffle.partitions - 분할된 저장소에 분할된 쓰기 중 병렬 처리를 제어합니다. 이 구성은 더 큰 컬렉션에 대한 초기 분할에만 필요합니다. Spark 풀에서 사용 가능한 코어 수로 설정됩니다. 기본값은 200입니다. 풀이 다른 워크로드에 사용되지 않는 경우 더 낮은 값은 리소스를 낭비할 수 있습니다. 일부 작업은 일찍 완료되고 느린 작업이 실행되는 동안 더 많은 작업을 시작할 수 있기 때문에 값이 높을수록 일반적으로 문제가 발생하지 않습니다. 분할 작업을 더 빨리 완료하려면 풀 크기를 늘리는 것이 좋습니다.

spark.read\
    .format("cosmos.olap") \
    .option("spark.synapse.linkedService", "<enter linked service name>") \
    .option("spark.cosmos.container", "<enter container name>") \
    .option("spark.cosmos.asns.execute.partitioning", "true") \
    .option("spark.cosmos.asns.partition.keys", "readDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    .option("spark.cosmos.asns.merge.partitioned.files", "true") \
    .option("spark.cosmos.asns.partitioning.maxRecordsPerFile", "2000000") \
    .option("spark.cosmos.asns.partitioning.shuffle.partitions", "400") \
    .load()

분할된 저장소를 사용한 쿼리 실행

분할된 저장소 지원으로 쿼리를 실행하려면 다음 두 가지 구성이 필요합니다.

  • spark.cosmos.asns.partition.keys
  • spark.cosmos.asns.basePath

다음 예는 이러한 구성을 사용하여 위의 분할된 저장소를 쿼리하는 방법과 파티션 키를 사용한 필터링이 파티션 정리를 활용하는 방법을 보여 줍니다. 분할된 이 저장소는 "ReadDate" 필드를 사용하여 분할됩니다.

df = spark.read\
    .format("cosmos.olap") \
    .option("spark.synapse.linkedService", "<enter linked service name>") \
    .option("spark.cosmos.container", "<enter container name>") \
    .option("spark.cosmos.asns.partition.keys", "readDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    .load()

df_filtered = df.filter("readDate='2020-11-01 00:00:00.000'")
display(df_filtered.limit(10))

위의 ReadDate = '2021-11-01' 필터는 실행 중에 2021-11-01 이외의 ReadDate 값에 해당하는 데이터를 검사에서 제거합니다.

참고 항목

분할된 저장소를 사용한 쿼리 개선 사항은 다음에 대한 쿼리가 실행될 때 적용됩니다.

  • Azure Cosmos DB 분석 저장소 컨테이너에서 만든 Spark 데이터 프레임
  • Azure Cosmos DB 분석 저장소 컨테이너를 가리키는 Spark 테이블.

다음 단계

자세히 알아보려면 다음 문서를 참조하세요