Particionamento personalizado no Link do Azure Synapse para o Azure Cosmos DB

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.

Neste artigo, você aprenderá a particionar seus dados no repositório analítico do Azure Cosmos DB, usando chaves essenciais para suas cargas de trabalho analíticas. Também explicamos como aproveitar o desempenho aprimorado da consulta com a remoção de partição. Você também aprenderá como o particionamento personalizado melhora o desempenho das consultas quando suas cargas de trabalho têm um número significativo de atualizações ou exclusões.

Observação

As contas e contêineres do Azure Cosmos DB devem ter o Link do Azure Synapse habilitado para aproveitar o particionamento personalizado.

Como ela funciona?

O particionamento do armazenamento analítico é independente do particionamento no armazenamento transacional. Por padrão, o armazenamento analítico não é particionado. Se você quiser consultar o repositório analítico com base em campos como Data, Hora, Categoria, etc., use o particionamento personalizado para criar um repositório particionado com base nessas chaves. Você pode escolher um único campo ou uma combinação de campos do conjunto de dados como a chave de partição do armazenamento analítico.

Você pode disparar o particionamento de um notebook do Azure Synapse Spark usando o Link Synapse do Azure. Você pode agendá-lo para ser executado como um trabalho em segundo plano, uma ou duas vezes por dia, mas pode ser executado com mais frequência, se necessário.

Observação

O armazenamento particionado aponta para a ADLS Gen2 de armazenamento primário que está vinculada ao espaço de trabalho do Azure Synapse.

Architecture of partitioned store in Azure Synapse Link for Azure Cosmos DB

O armazenamento particionado contém os dados analíticos do Azure Cosmos DB até o último carimbo de data/hora em que você iniciou o trabalho de particionamento. Quando você consulta dados analíticos usando os filtros de chave de partição, o Link do Synapse mescla automaticamente os dados no repositório particionado com as alterações mais recente no repositório analítico. Dessa forma, ele fornece os resultados mais recentes para suas consultas. Embora ele mescle os dados antes da consulta, o delta não é gravado de volta no armazenamento particionado. À medida que o delta entre os dados no armazenamento analítico e no armazenamento particionado se amplia, os tempos de consulta em dados particionados podem variar. Disparar o trabalho de particionamento com mais frequência reduz esse delta. Sempre que você executa o trabalho de partição, somente as alterações incrementais no repositório analítico são processadas, em vez do conjunto de dados completo.

Quando usar?

O uso do armazenamento particionado é opcional ao consultar dados analíticos no Azure Cosmos DB. Você pode consultar diretamente os mesmos dados usando o Link do Synapse com o armazenamento analítico existente. Talvez você queira ativar o armazenamento particionado se tiver os seguintes requisitos:

  • Filtros de consulta analítica comuns que poderiam ser usados como colunas de partição
  • Colunas de partição de baixa cardinalidade
  • A coluna de partição distribui dados igualmente entre partições
  • Alto volume de operações de atualização ou exclusão
  • Ingestão de dados lenta

Se você estiver consultando dados dinâmicos usando filtros de consulta diferentes das chaves de partição, recomendamos que você consulte o repositório analítico diretamente.

Benefícios

Verificação de dados reduzida pela remoção da partição

Como os dados correspondentes a cada chave de partição exclusiva são colocados no armazenamento particionado, quando você usa a chave de partição como um filtro de consulta, as execuções de consulta podem remover dos dados subjacentes e verificar apenas os dados necessários. Ao verificar dados limitados, a remoção de partição melhora o desempenho da consulta analítica.

Flexibilidade para particionar seus dados analíticos

Você pode ter várias estratégias de particionamento para um determinado contêiner de repositório analítico. Você pode usar chaves de partição compostas ou separadas com base em seus requisitos de consulta.

Principais aprimoramentos de desempenho

Além das melhorias de consulta pela remoção de partição, o particionamento personalizado também resulta em melhor desempenho de consulta para as seguintes cargas de trabalho:

  • Atualizar/excluir cargas de trabalho pesadas: em vez de manter o controle de várias versões de registros no armazenamento analítico e carregá-las durante cada execução de consulta, o armazenamento particionado contém apenas a versão mais recente dos dados. Essa funcionalidade melhora de forma significativa o desempenho da consulta quando você tem cargas de trabalho pesadas de atualização/exclusão.

  • Cargas de trabalho de ingestão de dados lentas – o particionamento compacta dados analíticos e, portanto, se sua carga de trabalho tiver ingestão de dados lenta, essa compactação poderá resultar em um melhor desempenho de consulta

Garantia transacional

É importante observar que o particionamento personalizado garante a garantia transacional completa. O caminho da consulta não é bloqueado enquanto a execução do particionamento está em andamento. Cada execução de consulta lê os dados particionados a partir do último particionamento bem-sucedido. Ele lê os dados mais recentes do armazenamento analítico, o que garante que as consultas sempre retornem os dados mais recentes disponíveis ao usar o armazenamento particionado.

Segurança

Se você configurou pontos de extremidade privados gerenciados para seu repositório analítico, recomendamos também adicionar pontos de extremidade privados para o repositório particionado. O armazenamento particionado é a conta de armazenamento primária associada ao espaço de trabalho do Synapse.

Da mesma forma, se você configurou chaves gerenciadas pelo cliente no armazenamento analítico, deverá habilitá-las diretamente na conta de armazenamento primário do espaço de trabalho do Synapse, que também é o armazenamento particionado.

Estratégias de particionamento

Você pode usar uma ou mais chaves de partição para seus dados analíticos. Se você estiver usando várias chaves de partição, aqui estão algumas recomendações sobre como particionar os dados:

  • Usando chaves compostas:

    Digamos que você queira consultar frequentemente com base em Key1 e Key2.

    Por exemplo, "consultar todos os registros em que ReadDate = '2021-10-08' e Location = 'Sydney'".

    Nesse caso, o uso de chaves compostas é mais eficiente para pesquisar todos os registros que correspondem ao ReadDate e os registros que correspondem ao Local dentro desse ReadDate.

    Opções de configuração da amostra:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Agora você pode consultar com base no filtro “Local”:

    • Talvez você queira consultar o repositório analítico diretamente. O repositório particionado verifica todos os registros por ReadDate primeiro e, em seguida, por Local. Portanto, dependendo de sua carga de trabalho e cardinalidade de seus dados analíticos, você poderá obter resultados melhores consultando o repositório analítico diretamente.
    • Você também pode executar outro trabalho de partição para particionar também com base no 'Local' no mesmo armazenamento particionado.
  • Usando várias chaves separadamente:

    Digamos que você queira consultar com frequência às vezes com base em 'ReadDate' e em outras ocasiões, com base no 'Local'.

    Por exemplo,

    • Consultar todos os registros em que ReadDate = ‘2021-10-08’
    • Consultar todos os registros em que Local = ‘Sydney’

    Execute dois trabalhos de partição com chaves de partição, conforme definido abaixo para este cenário:

    Trabalho 1:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Trabalho 2:

    .option("spark.cosmos.asns.partition.keys", "Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Observe que, agora, não é eficiente consulta com frequência os filtros “ReadDate” e “Local”, no particionamento acima. As chaves compostas fornecem melhor desempenho de consulta nesse caso.

Limitações

  • O particionamento personalizado só está disponível para Azure Synapse Spark. No momento, não há suporte para particionamento personalizado para pools de SQL sem servidor.

  • Atualmente, o armazenamento particionado só pode apontar para a conta de armazenamento primária associada ao espaço de trabalho do Synapse. Não há suporte para a seleção de contas de armazenamento personalizadas neste momento.

  • O particionamento personalizado só está disponível para a API para NoSQL no Azure Cosmos DB. As APIs para MongoDB, Gremlin e Cassandra estão em versão prévia no momento.

Preços

Além do preço do Link do Azure Synapse, incorrerão os seguintes encargos ao usar o particionamento personalizado:

  • Você é cobrado pelo uso de pools do Synapse Apache Spark ao executar trabalhos de particionamento no armazenamento analítico.

  • Os dados particionados são armazenados na conta primária do Azure Data Lake Storage Gen2 associada ao seu espaço de trabalho do Azure Synapse Analytics. Há custos associados ao uso do armazenamento e transações do ADLS Gen2. Esses custos são determinados pelo armazenamento exigido por dados analíticos particionados e dados processados para consultas analíticas no Synapse, respectivamente. Para obter mais informações sobre preços, acesse a página de preços do Azure Data Lake Storage.

Perguntas frequentes

Com que frequência devo executar o trabalho de particionamento personalizado?

Há vários fatores, como volume de dados incrementais, requisitos de latência de consulta, etc., que determinam com que frequência você pode executar o trabalho de particionamento personalizado. Ele pode ser executado uma vez por dia ou uma vez em algumas horas. Talvez você queira agendar o trabalho de particionamento com mais frequência se o volume de dados de entrada for alto e a latência de consulta esperada for baixa. Você também deve primeiro acumular dados incrementais no armazenamento analítico para que a remoção de partição seja eficaz.

Os resultados da consulta incluem os dados mais recentes enquanto a execução do trabalho de particionamento está em andamento?

Sim, o particionamento personalizado fornece uma garantia transacional completa. Portanto, a consulta resulta em qualquer ponto do tempo combinando os dados particionados existentes com os dados da parte final retornando o último conjuntos de dados do armazenamento analítico.

O particionamento personalizado pode usar a autenticação de serviço vinculado no Azure Synapse Analytics?

Sim, a autenticação de serviço vinculado pode ser usada para particionamento de armazenamento analítico.

Posso alterar a chave de partição de um determinado contêiner em um momento posterior?

Sim, a chave de partição para um determinado contêiner pode ser alterada e a nova definição de chave de partição criará um novo armazenamento particionado.

Observação

A definição da chave de partição faz parte do caminho do armazenamento particionado.

Chaves de partição diferentes podem apontar para o mesmo caminho base?

Sim, você pode especificar várias chaves de partição no mesmo armazenamento particionado, conforme abaixo:

.option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \

Próximas etapas

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