Particionamento personalizado no Azure Synapse Link para Azure Cosmos DB

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.

Neste artigo, você aprenderá a particionar seus dados no repositório analítico do Azure Cosmos DB usando chaves que são críticas para suas cargas de trabalho analíticas. Ele também explica como aproveitar o desempenho de consulta aprimorado com a remoção de partição. Você também aprende 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.

Nota

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

Como é que isto funciona?

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

Você pode disparar o particionamento 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, mas pode ser executado com mais frequência, se necessário.

Nota

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

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

O repositório particionado contém dados analíticos do Azure Cosmos DB até o último carimbo de data/hora em que você executou seu trabalho de particionamento. Quando você consulta dados analíticos usando os filtros de chave de partição, o Synapse Link mescla automaticamente os dados de armazenamento particionados com as alterações mais recentes no repositório analítico. Desta forma, dá-lhe os resultados mais recentes para as suas consultas. Embora mescle os dados antes de consultar, o delta não é gravado de volta no armazenamento particionado. À medida que o delta entre os dados no repositório analítico e no armazenamento particionado aumenta, os tempos de consulta nos dados particionados podem variar. Acionar o trabalho de particionamento com mais frequência reduz esse delta. Cada vez que você executa o trabalho de partição, apenas alterações incrementais no repositório analítico são processadas, em vez do conjunto de dados completo.

Quando usar?

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

  • Filtros de consulta analítica comuns que podem 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 lenta de dados

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 a partir da remoção de partições

Como os dados correspondentes a cada chave de partição exclusiva são colocalizados no armazenamento particionado, quando você usa a chave de partição como um filtro de consulta, as execuções de consulta podem remover os dados subjacentes e verificar apenas os dados necessários. Ao analisar dados limitados, a remoção de partições 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 armazenamento analítico. Você pode usar chaves de partição compostas ou separadas com base em seus requisitos de consulta.

Melhorias no desempenho da consulta

Além das melhorias de consulta da 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 controlar várias versões de registros no repositório analítico e carregá-los durante cada execução de consulta, o armazenamento particionado contém apenas a versão mais recente dos dados. Esse recurso melhora significativamente o desempenho da consulta quando você atualiza/exclui cargas de trabalho pesadas.

  • Cargas de trabalho lentas de ingestão de dados - O particionamento compacta os dados analíticos e, portanto, se a sua carga de trabalho tiver ingestão lenta de dados, essa compactação pode resultar em um melhor desempenho da consulta

Garantia transacional

É importante notar que o particionamento personalizado garante total garantia transacional. 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 do último particionamento bem-sucedido. Ele lê os dados mais recentes do repositório 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 adicionar pontos de extremidade privados gerenciados para o repositório particionado também. O armazenamento particionado é a conta de armazenamento principal associada ao seu espaço de trabalho Synapse.

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

Estratégias de criação de partições

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, você deseja consultar frequentemente com base em Key1 e Key2.

    Por exemplo, "Consulta para todos os registros onde ReadDate = '2021-10-08' e Location = 'Sydney'".

    Nesse caso, o uso de chaves compostas é mais eficiente, para procurar todos os registros que correspondem a ReadDate e os registros que correspondem a Location dentro dessa ReadDate.

    Opções de configuração de exemplo:

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

    Agora pode consultar com base no filtro "Localização":

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

    Digamos que você queira consultar frequentemente às vezes com base em 'ReadDate' e outras vezes, com base em 'Location'.

    Por exemplo,

    • Consulta de todos os registos em que ReadDate = '2021-10-08'
    • Consulta de todos os registos em que Localização = 'Sydney'

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

    Emprego 1:

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

    Emprego 2:

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

    Observe que agora não é eficiente consultar com frequência com base nos filtros "ReadDate" e "Location" juntos, no particionamento acima. As chaves compostas permitem um melhor desempenho da consulta nesse caso.

Limitações

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

  • Atualmente, o armazenamento particionado só pode apontar para a conta de armazenamento principal associada ao espaço de trabalho Sinapse. Neste momento, não há suporte para a seleção de contas de armazenamento personalizadas.

  • O particionamento personalizado só está disponível para API para NoSQL no Azure Cosmos DB. API para MongoDB, Gremlin e Cassandra estão em pré-visualização no momento.

Preços

Além dos preços do Azure Synapse Link, você incorre nos seguintes encargos ao usar o particionamento personalizado:

  • Você é cobrado pelo uso de pools Synapse Apache Spark quando executa trabalhos de particionamento no repositório analítico.

  • Os dados particionados são armazenados na conta principal do Azure Data Lake Storage Gen2 associada ao seu espaço de trabalho do Azure Synapse Analytics. Você incorre nos custos associados ao uso do armazenamento e das 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, visite a página de preços do Armazenamento do Azure Data Lake.

Perguntas mais frequentes

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

Existem vários fatores, como volume de dados incrementais, requisitos de latência de consulta, etc., que determinam a frequência com que você pode executar o trabalho de particionamento personalizado. Pode ser executado uma vez por dia ou uma vez a cada poucas 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 repositório 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. Assim, os resultados da consulta a qualquer momento combinam os dados particionados existentes com os dados finais que retornam o conjunto de dados de armazenamento analítico mais recente.

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 analítico de armazenamento.

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

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

Nota

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

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

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

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

Próximos passos

Para saber mais, consulte os seguintes documentos: