Configurar o particionamento personalizado para particionar dados de repositório analítico

APLICA-SE AO: NoSQL MongoDB Gremlin

O particionamento personalizado permite que você particione dados de armazenamento analítico, em campos que são comumente usados como filtros em consultas analíticas, resultando em um desempenho de consulta aprimorado. Para saber mais sobre o particionamento personalizado, confira o artigo o que é o particionamento personalizado.

Para usar o particionamento personalizado, você precisa habilitar o Link do Synapse na conta do Azure Cosmos DB. Para saber mais, veja como configurar o Link do Synapse. A execução do particionamento personalizado pode ser acionada no notebook do Apache Spark no Azure Synapse usando o Link do Synapse para o Azure Cosmos DB.

Observação

As contas do Microsoft Azure Cosmos DB devem ter o Link Synapse do Azure habilitado para usar o particionamento personalizado. Atualmente, o particionamento personalizado tem suporte somente para o Azure Synapse Spark 2.0.

Observação

O Link do Synapse para a API para Gremlin agora está em versão prévia. Você pode habilitar o Link do Synapse em grafos novos ou existentes usando a CLI do Azure. Para obter mais informações de como configurá-lo, clique aqui.

Disparar um trabalho de particionamento personalizado

O particionamento pode ser disparado de um notebook do Azure Synapse Spark usando o Link do Synapse do Azure. Você pode agendá-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 conjuntos de dados como a chave de partição do armazenamento analítico.

Veja a seguir as opções de configuração obrigatórias para acionar a execução do particionamento personalizado:

  • spark.cosmos.asns.execute.partitioning - Valor booliano que aciona a execução do particionamento personalizado. O valor padrão é false.

  • spark.cosmos.asns.partition.keys - Chave ou chaves de partição que usam uma cadeia de caracteres formatada como DDL. Por exemplo: Cadeia de caracteres ReadDate.

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

Observação

Se você escolhe várias chaves de partição, pode acessar esses registros do mesmo armazenamento particionado com o basePath que indica a chave.

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

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

  • spark.cosmos.asns.partitioning.maxRecordsPerFile - Número máximo de registros em um arquivo de partição única no repositório particionado. Se essa configuração e spark.cosmos.asns.merge.partitioned.files forem especificados, os novos arquivos serão criados quando o número de registros exceder o valor de maxRecordsPerFile. Normalmente, essa configuração é necessária apenas para o particionamento inicial de 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 em arquivos antes de alcançar o maxRecordsPerFile. A divisão de arquivo também depende do paralelismo disponível no pool.

  • spark.cosmos.asns.partitioning.shuffle.partitions - Ele controla o paralelismo durante as gravações particionadas no armazenamento particionado. Essa configuração é necessária apenas para o particionamento inicial de coleções maiores. Ele é definido como o número de núcleos disponíveis no Pool do Spark. O valor padrão é 200. Valores mais baixos podem desperdiçar recursos, se o pool não estiver sendo usado para outras cargas de trabalho. O valor mais alto normalmente não causa problemas, pois algumas tarefas são concluídas antes, e outras podem iniciar enquanto as lentas estão em execução. Se você quiser que o trabalho de particionamento seja concluído com mais rapidez, aumente 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 consulta com armazenamento particionado

As duas configurações a seguir são necessárias para executar consultas com suporte de repositório 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 com a chave de partição pode fazer uso da remoção de partição. Esse armazenamento é 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 aos valores de ReadDate diferentes de 2021-11-01 da verificação durante a execução.

Observação

Os aprimoramentos de consulta que usam o armazenamento particionado são aplicáveis quando as consultas são executadas:

  • Nos Dataframes do Apache Spark criados no contêiner de repositório analítico do Azure Cosmos DB e
  • Nas tabelas do Apache Spark que apontam para o contêiner do repositório analítico do Azure Cosmos DB.

Próximas etapas

Para saber mais, consulte a seguinte documentação: