Considerações sobre o desempenho do ponto de extremidade de análise SQL

Aplica-se a:✅ Ponto de extremidade de análise SQL no Microsoft Fabric

O ponto de extremidade de análise SQL permite que você consulte dados no lakehouse usando a linguagem T-SQL e o protocolo TDS. Cada lakehouse tem um ponto de extremidade de análise SQL. O número de pontos de extremidade de análise SQL em um espaço de trabalho corresponde ao número de lakehouses e bancos de dados espelhados provisionados nesse espaço de trabalho.

Um processo em segundo plano é responsável por verificar se há alterações no lakehouse e manter o endpoint de análise SQL atualizado para todas as alterações confirmadas no lakehouse em um espaço de trabalho. O processo de sincronização é gerenciado de forma transparente pela plataforma Microsoft Fabric. Quando uma alteração é detetada em uma lakehouse, um processo em segundo plano atualiza os metadados e o ponto de extremidade de análise SQL reflete as alterações comprometidas nas tabelas lakehouse. Em condições normais de operação, o atraso entre um lakehouse e um ponto de extremidade de análise SQL é inferior a um minuto. O tempo real pode variar de alguns segundos a minutos, dependendo de uma série de fatores que são descritos neste artigo.

Esquema gerado automaticamente no ponto de extremidade de análise SQL do Lakehouse

O ponto de extremidade da análise SQL gerencia as tabelas geradas automaticamente para que os usuários do espaço de trabalho não possam modificá-las. Os usuários podem enriquecer o modelo de banco de dados adicionando seus próprios esquemas SQL, exibições, procedimentos e outros objetos de banco de dados.

Para cada tabela Delta em seu Lakehouse, o ponto de extremidade de análise SQL gera automaticamente uma tabela no esquema apropriado. Para tipos de dados de esquema gerados automaticamente para o ponto de extremidade de análise SQL, consulte Tipos de dados no Microsoft Fabric.

As tabelas no ponto de extremidade de análise SQL são criadas com um pequeno atraso. Depois de criar ou atualizar a tabela Delta Lake no lago, a tabela de ponto de extremidade da análise SQL que faz referência à tabela Delta Lake será criada/atualizada automaticamente.

A quantidade de tempo que leva para atualizar a tabela está relacionada ao quão otimizadas as tabelas Delta são. Para obter mais informações, consulte a otimização da tabela Delta Lake e o V-Order para saber mais sobre os principais cenários e um guia detalhado sobre como manter eficientemente as tabelas Delta para obter o máximo desempenho.

Você pode forçar manualmente uma atualização da verificação automática de metadados no portal da malha. Na página do ponto de extremidade da análise SQL, selecione o botão Atualizar na barra de ferramentas do Explorer para atualizar o esquema. Vá para Consultar seu ponto de extremidade de análise SQL e procure o botão de atualização, conforme mostrado na imagem a seguir.

Captura de tela do portal do Fabric mostrando o botão Atualizar esquema do ponto de extremidade de análise SQL.

Orientação

  • A descoberta automática de metadados rastreia as alterações confirmadas em lakehouses e é uma única instância por espaço de trabalho de malha. Se você estiver observando um aumento da latência para alterações a serem sincronizadas entre lakehouses e endpoint de análise SQL, isso pode ser devido ao grande número de lakehouses em um espaço de trabalho. Nesse cenário, considere migrar cada lakehouse para um espaço de trabalho separado, pois isso permite que a descoberta automática de metadados seja dimensionada.
  • Os arquivos Parquet são imutáveis por design. Quando há uma operação de atualização ou exclusão, uma tabela Delta adicionará novos arquivos parquet com o conjunto de alterações, aumentando o número de arquivos ao longo do tempo, dependendo da frequência de atualizações e exclusões. Se não houver manutenção agendada, eventualmente, esse padrão criará uma sobrecarga de leitura e isso afetará o tempo necessário para sincronizar as alterações no ponto de extremidade da análise SQL. Para resolver isso, agende operações regulares de manutenção da mesa do lago.
  • Em alguns cenários, você pode observar que as alterações confirmadas em um lakehouse não são visíveis no ponto de extremidade de análise SQL associado. Por exemplo, você pode ter criado uma nova tabela no lakehouse, mas ela não está listada no ponto de extremidade da análise SQL. Ou, você pode ter comprometido um grande número de linhas em uma tabela em uma casa de lago, mas esses dados não são visíveis no ponto de extremidade de análise SQL. Recomendamos iniciar uma sincronização de metadados sob demanda, acionada a partir da opção da faixa de opções Atualizar do editor de consultas SQL. Essa opção força uma sincronização de metadados sob demanda, em vez de aguardar a conclusão da sincronização de metadados em segundo plano.
  • Nem todos os recursos Delta são compreendidos pelo processo de sincronização automática. Para obter mais informações sobre a funcionalidade suportada por cada mecanismo na malha, consulte Interoperabilidade Delta Lake.
  • Se houver um volume extremamente grande de alterações de tabelas durante o processamento ETL (Extract Transform and Load), poderá ocorrer um atraso esperado até que todas as alterações sejam processadas.

Considerações sobre o tamanho da partição

A escolha da coluna de partição para uma tabela delta em uma casa de lago também afeta o tempo necessário para sincronizar alterações no ponto de extremidade de análise SQL. O número e o tamanho das partições da coluna de partição são importantes para o desempenho:

  • Uma coluna com alta cardinalidade (maioritariamente ou inteiramente feita de valores únicos) resulta num grande número de partições. Um grande número de partições afeta negativamente o desempenho da verificação de descoberta de metadados em busca de alterações. Se a cardinalidade de uma coluna for alta, escolha outra coluna para particionamento.
  • O tamanho de cada partição também pode afetar o desempenho. Nossa recomendação é usar uma coluna que resultaria em uma partição de pelo menos (ou perto de) 1 GB. Recomendamos seguir as melhores práticas para manutenção de tabelas delta; otimização. Para um script python para avaliar partições, consulte Script de exemplo para obter detalhes de partição.

Um grande volume de arquivos de parquet de pequeno porte aumenta o tempo necessário para sincronizar alterações entre um lakehouse e seu endpoint de análise SQL associado. Você pode acabar com um grande número de arquivos de parquet em uma tabela delta por um ou mais motivos:

  • Se você escolher uma partição para uma tabela delta com alto número de valores exclusivos, ela será particionada por cada valor exclusivo e poderá estar superparticionada. Escolha uma coluna de partição que não tenha uma cardinalidade alta e resulte em um tamanho de partição individual de pelo menos 1 GB.
  • As taxas de ingestão de dados em lote e streaming também podem resultar em pequenos arquivos, dependendo da frequência e do tamanho das alterações que estão sendo gravadas em uma casa de lago. Por exemplo, pode haver um pequeno volume de mudanças chegando à casa do lago e isso resultaria em pequenos arquivos de parquet. Para resolver isso, recomendamos a implementação da manutenção regular da mesa do lago.

Script de exemplo para detalhes da partição

Use o bloco de anotações a seguir para imprimir um relatório detalhando o tamanho e os detalhes das partições subjacentes a uma tabela delta.

  1. Primeiro, você deve fornecer o caminho ABSFF para sua tabela delta na variável delta_table_path.
    • Você pode obter o caminho ABFSS de uma tabela delta no Fabric portal Explorer. Clique com o botão direito do rato no nome da tabela e, em seguida, selecione COPY PATH a partir da lista de opções.
  2. O script produz todas as partições para a tabela delta.
  3. O script itera através de cada partição para calcular o tamanho total e o número de arquivos.
  4. O script produz os detalhes de partições, arquivos por partições e tamanho por partição em GB.

O script completo pode ser copiado do seguinte bloco de código:

# Purpose: Print out details of partitions, files per partitions, and size per partition in GB.
  from notebookutils import mssparkutils

# Define ABFSS path for your delta table. You can get ABFSS path of a delta table by simply right-clicking on table name and selecting COPY PATH from the list of options.
  delta_table_path = "abfss://<workspace id>@<onelake>.dfs.fabric.microsoft.com/<lakehouse id>/Tables/<tablename>"

# List all partitions for given delta table
partitions = mssparkutils.fs.ls(delta_table_path)

# Initialize a dictionary to store partition details
partition_details = {}

# Iterate through each partition
for partition in partitions:
  if partition.isDir:
      partition_name = partition.name
      partition_path = partition.path
      files = mssparkutils.fs.ls(partition_path)
      
      # Calculate the total size of the partition

      total_size = sum(file.size for file in files if not file.isDir)
      
      # Count the number of files

      file_count = sum(1 for file in files if not file.isDir)
      
      # Write partition details

      partition_details[partition_name] = {
          "size_bytes": total_size,
          "file_count": file_count
      }
      
# Print the partition details
for partition_name, details in partition_details.items():
  print(f"{partition_name}, Size: {details['size_bytes']:.2f} bytes, Number of files: {details['file_count']}")