Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O endpoint de análise SQL permite que você consulte dados no lakehouse usando a linguagem T-SQL e o protocolo TDS.
Dica
Para obter orientações abrangentes sobre como otimizar tabelas Delta para uso em terminais de análise SQL, incluindo recomendações de tamanho de arquivo e de grupo de linhas, consulte Manutenção e otimização de tabelas entre cargas de trabalho.
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 mesmo espaço de trabalho.
Um processo em segundo plano é responsável por examinar o lakehouse em busca de alterações e manter o endpoint de análise SQL atualizado com todas as alterações confirmadas nos lakehouses em um espaço de trabalho. A plataforma Microsoft Fabric gerencia de forma transparente o processo de sincronização. Quando uma alteração é detectada em um data lakehouse, um processo em segundo plano atualiza os metadados, e o ponto de extremidade de análise SQL reflete as alterações efetuadas nas tabelas do data lakehouse. Em condições normais de operação, a latência 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 muitos fatores que este artigo discute. O processo em segundo plano só é executado quando o endpoint de análises SQL está ativo e é encerrado após 15 minutos de inatividade.
Orientação
- A descoberta automática de metadados rastreia as alterações comprometidas nos lakehouses e é uma instância singular por espaço de trabalho do Fabric. Se você observar um aumento na latência para que as alterações sejam sincronizadas entre os lakehouses e o endpoint de análise SQL, isso pode ocorrer devido a um 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 essa abordagem permite que a descoberta automática de metadados escale.
- Os arquivos Parquet são imutáveis por design. Quando há uma operação de atualização ou exclusão, uma tabela Delta adiciona novos arquivos Parquet com o conjunto de alterações, o que aumenta o número de arquivos ao longo do tempo, dependendo da frequência de atualizações e exclusões. Se você não agendar a manutenção, esse padrão acabará criando uma sobrecarga nas leituras, e isso afetará o tempo necessário para sincronizar as alterações com o endpoint de análise SQL. Para resolver esse problema, agende operações regulares de manutenção da tabela lakehouse.
- Em alguns cenários, você pode observar que as alterações confirmadas em um lakehouse não são visíveis no endpoint de análise SQL associado. Por exemplo, você pode criar uma nova tabela no lakehouse, mas ela ainda não está listada no endpoint de análise SQL. Ou você pode gravar um grande número de linhas em uma tabela de um lakehouse, mas os dados ainda não estão visíveis no endpoint de análise SQL. Você tem a opção de iniciar a sincronização de metadados sob demanda.
- O processo de sincronização automática não dá suporte a todos os recursos delta. Para obter mais informações sobre a funcionalidade suportada de cada mecanismo no Fabric, consulte a interoperabilidade do formato de tabela Delta Lake.
- Se houver um volume extremamente grande de alterações de tabela durante o processamento de ETL (Extração de Transformação e Carga), ocorrerá um atraso esperado até que todas as alterações sejam processadas.
Otimizando tabelas lakehouse para consultar o ponto de extremidade de análise do SQL
Quando o endpoint de análise SQL lê tabelas armazenadas em um lakehouse, o desempenho da consulta depende fortemente do layout físico dos arquivos Parquet subjacentes.
Um grande número de pequenos arquivos Parquet gera sobrecarga e afeta negativamente o desempenho das consultas. Para garantir um desempenho previsível e eficiente, mantenha o armazenamento de tabelas para que cada arquivo Parquet contenha dois milhões de linhas. Essa contagem de linhas fornece um nível equilibrado de paralelismo sem fragmentar o conjunto de dados em fatias excessivamente pequenas.
Além das diretrizes de contagem de linhas, o tamanho do arquivo é igualmente importante. O endpoint de análise SQL apresenta melhor desempenho quando os arquivos Parquet são grandes o suficiente para minimizar a sobrecarga do processamento de arquivos, mas não tão grandes a ponto de limitar a eficiência da varredura paralela. Para a maioria das cargas de trabalho, manter arquivos Parquet individuais próximos a 400 MB atinge o melhor equilíbrio. Para obter esse equilíbrio, use as seguintes etapas:
- Defina
maxRecordsPerFilecomo 2.000.000 antes que ocorram alterações de dados. - Execute suas alterações de dados (ingestão de dados, atualizações, exclusões).
- Defina
maxFileSizepara 4 GB. - Execute
OPTIMIZE. Para obter detalhes sobre como usarOPTIMIZE, consulte Executar manutenção de tabela do Lakehouse.
O script a seguir fornece um modelo para estas etapas e deve ser executado em um lakehouse:
from delta.tables import DeltaTable
# 1. CONFIGURE LIMITS
# Cap files to 2M rows during writes. This should be done before data ingestion occurs.
spark.conf.set("spark.sql.files.maxRecordsPerFile", 2000000)
# 2. INGEST DATA
# Here, you ingest data into your table
# 3. CAP FILE SIZE (~4GB)
spark.conf.set("spark.databricks.delta.optimize.maxFileSize", 4 * 1024 * 1024 * 1024)
# 4. RUN OPTIMIZE (bin-packing)
spark.sql("""
OPTIMIZE myTable
""")
Para manter tamanhos de arquivo adequados, execute periodicamente operações de otimização do Delta, como OPTIMIZE, especialmente para tabelas que recebem inserções incrementais, atualizações e exclusões frequentes. Essas operações de manutenção compactam arquivos pequenos em arquivos de tamanho adequado, ajudando a garantir que o ponto de extremidade de análise do SQL possa processar consultas com eficiência.
Note
Para obter orientações sobre a manutenção geral das tabelas do lakehouse, consulte Executar a manutenção de tabela no Lakehouse.
Considerações sobre o tamanho das partições
A escolha da coluna de partição para uma tabela delta em um lakehouse também afeta o tempo necessário para sincronizar mudanças no endpoint 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 (principalmente ou inteiramente composta de valores exclusivos) resulta em um número grande de partições. Um número grande 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. Use uma coluna que resulte em uma partição de pelo menos (ou perto de) 1 GB. Siga as práticas recomendadas para manutenção e otimização de tabelas delta. Para obter um script Python para avaliar partições, consulte Sample script para obter detalhes da partição.
Um grande volume de pequenos arquivos parquet aumenta o tempo necessário para sincronizar alterações entre um lakehouse e o endpoint associado de análise SQL. Você pode acabar com um número grande de arquivos parquet em uma tabela delta por um ou mais motivos:
- Se você escolher uma partição para uma tabela Delta com um alto número de valores exclusivos, a tabela será particionada por cada valor exclusivo e poderá ser superpartida. Escolha uma coluna de partição que não tenha uma cardinalidade alta e resulte em partições individuais de pelo menos 1 GB cada.
- As taxas de ingestão de dados em lote e streaming também podem resultar em arquivos pequenos, dependendo da frequência e do tamanho das alterações gravadas em um lakehouse. Por exemplo, pode haver um pequeno volume de alterações chegando até a casa do lago, resultando em pequenos arquivos parquet. Para resolver esse problema, implemente a manutenção regular da tabela lakehouse.
Amostra de script para obter detalhes da partição
Use o notebook a seguir para imprimir um relatório detalhando o tamanho e os detalhes das partições que sustentam uma tabela delta.
- Primeiro, forneça o caminho ABFSS para sua tabela delta na variável
delta_table_path.- Você pode obter o caminho ABFSS de uma tabela delta no Explorer do portal do Fabric. Clique com o botão direito do mouse no nome da tabela e selecione
COPY PATHna lista de opções.
- Você pode obter o caminho ABFSS de uma tabela delta no Explorer do portal do Fabric. Clique com o botão direito do mouse no nome da tabela e selecione
- O script gera todas as partições para a tabela delta.
- O script itera através de cada partição para calcular o tamanho total e o número de arquivos.
- O script gera os detalhes de partições, arquivos por partições e tamanho por partição em GB.
Você pode copiar o script completo 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']}")
Esquema gerado automaticamente no endpoint de análise SQL do Lakehouse
Para cada tabela Delta em seu Lakehouse, o endpoint SQL de análise gera automaticamente uma tabela no esquema apropriado. O mecanismo do endpoint de análise SQL baseia-se no mecanismo do Fabric Data Warehouse.
Para obter mais informações, consulte sincronização de metadados do endpoint de análises SQL. Você também pode forçar uma atualização programaticamente da varredura automática de metadados usando a API REST para atualizar os metadados do endpoint SQL.