Configurar particionamento personalizado para particionar dados de armazenamento analítico

APLICA-SE A: NoSQL MongoDB Gremlin

O particionamento personalizado permite particionar dados de armazenamento analítico, em campos que são comumente usados como filtros em consultas analíticas, resultando em melhor desempenho de consulta. Para saber mais sobre particionamento personalizado, consulte o artigo O que é particionamento personalizado.

Para usar o particionamento personalizado, você deve habilitar o Azure Synapse Link em sua conta do Azure Cosmos DB. Para saber mais, consulte como configurar o Azure Synapse Link. A execução de particionamento personalizado pode ser acionada a partir do bloco de anotações do Azure Synapse Spark usando o Azure Synapse Link para Azure Cosmos DB.

Nota

As contas do Azure Cosmos DB devem ter o Azure Synapse Link habilitado para aproveitar o particionamento personalizado. Atualmente, o particionamento personalizado é suportado apenas para o Azure Synapse Spark 2.0.

Nota

Synapse Link for Gremlin API está agora em pré-visualização. Você pode habilitar o Synapse Link em seus gráficos novos ou existentes usando a CLI do Azure. Para obter mais informações sobre como configurá-lo, clique aqui.

Acionar um trabalho de particionamento personalizado

O particionamento pode ser acionado a partir de um bloco de anotações do Azure Synapse Spark usando o Azure Synapse Link. Você pode programá-lo para ser executado como um trabalho em segundo plano, uma ou duas vezes por dia, ou pode ser executado com mais frequência, se necessário. Você também pode escolher um ou mais campos do conjunto de dados como a chave de partição de armazenamento analítico.

A seguir estão as opções de configuração obrigatórias que são necessárias para disparar a execução de particionamento personalizado:

  • spark.cosmos.asns.execute.partitioning - Valor booleano que aciona a execução de particionamento personalizado. O valor predefinido é false.

  • spark.cosmos.asns.partition.keys - Chave/s de partição usando string formatada DDL. Por exemplo: ReadDate String.

  • spark.cosmos.asns.basePath - O caminho base para o armazenamento particionado na conta de armazenamento primário Synapse.

Nota

Se você escolher várias chaves de partição, poderá acessar esses registros do mesmo armazenamento particionado com o basePath indicando a chave.

A seguir estão as opções de configuração opcionais que você pode usar ao acionar a execução de particionamento personalizado:

  • spark.cosmos.asns.merge.partitioned.files - Valor booleano que permite criar um único arquivo por valor de partição por execução. O valor predefinido é falso.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile - Número máximo de registros em um único arquivo particionado no armazenamento particionado. Se essa configuração e o forem especificados, novos arquivos serão criados assim que o número de registros exceder o spark.cosmos.asns.merge.partitioned.files valor maxRecordsPerFile. Essa configuração normalmente é necessária apenas para particionamento inicial para coleções maiores. O valor padrão é 1.000.000.

    Quando você define maxRecordsPerFile, mas não configura spark.cosmos.asns.merge.partitioned.files, os registros podem ser divididos entre arquivos antes de chegar ao maxRecordsPerFile. A divisão do arquivo também depende do paralelismo disponível no pool.

  • spark.cosmos.asns.partitioning.shuffle.partitions - Controla o paralelismo durante gravações particionadas no armazenamento particionado. Essa configuração é necessária apenas para particionamento inicial para coleções maiores. Ele é definido para o número de núcleos disponíveis no pool do Spark. O valor predefinido é 200. Valores mais baixos podem desperdiçar recursos se o pool não estiver sendo usado para outras cargas de trabalho. Um valor mais alto normalmente não causa problemas, porque algumas tarefas são concluídas cedo e podem iniciar mais tarefas enquanto as lentas estão sendo executadas. Se você quiser que o trabalho de particionamento seja concluído mais rapidamente, é uma boa prática aumentar o tamanho do pool.

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

Execução de consultas com armazenamento particionado

As duas configurações a seguir são necessárias para executar consultas com suporte a armazenamento particionado:

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

O exemplo a seguir mostra como usar essas configurações para consultar o armazenamento particionado acima e como a filtragem usando a chave de partição pode usar a remoção de partição. Este armazenamento particionado é particionado usando o campo "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))

O filtro ReadDate = '2021-11-01' acima eliminará os dados correspondentes a valores ReadDate diferentes de 2021-11-01 da digitalização, durante a execução.

Nota

As melhorias de consulta usando armazenamento particionado são aplicáveis quando as consultas são executadas no seguinte:

  • Os Dataframes do Spark criados a partir do contêiner de armazenamento analítico do Azure Cosmos DB e
  • As tabelas do Spark apontando para o contêiner de repositório analítico do Azure Cosmos DB.

Próximos passos

Para saber mais, consulte os seguintes documentos: