Conecte-se a fontes de dados e ingira dados

Concluído

Você pode usar um notebook do Fabric para se conectar aos dados mantidos no Armazenamento de Blobs do Azure, um Banco de Dados SQL do Azure e outras opções de armazenamento. Ao se conectar a uma fonte de dados, você pode usar os dados em processos analíticos, embora eles não sejam armazenados em um lakehouse do Fabric. Você também pode usar código Spark para filtrar e processar os dados antes de carregá-los no lakehouse, permitindo que você use o Spark como uma ferramenta poderosa para ingestão de dados em seu ambiente de análise do Fabric.

Conectar o armazenamento de blobs do Azure

O código PySpark a seguir conecta-se aos dados mantidos no armazenamento de blobs do Azure, lê dados em um DataFrame e exibe os dados.

# Azure Blob Storage access info
blob_account_name = "azureopendatastorage"
blob_container_name = "nyctlc"
blob_relative_path = "yellow"

# blob_sas_token = "add your SAS token here" 
# Construct the path for connection
wasbs_path = f'wasbs://{blob_container_name}@{blob_account_name}.blob.core.windows.net/{blob_relative_path}'

# WASBS path for connection including SAS token
# wasbs_path = f'wasbs://{blob_container_name}@{blob_account_name}.blob.core.windows.net/{blob_relative_path}?{blob_sas_token}'

# Read parquet data from Azure Blob Storage path
blob_df = spark.read.parquet(wasbs_path)

# Display the Azure Blob DataFrame
display(blob_df)

Observação

Este exemplo mostra como se conectar aos dados mantidos nos Conjunto de Dados em Aberto no Azure, que não exigem um token SAS. Para se conectar aos seus próprios dados, você precisará gerar um token SAS e adicioná-lo ao código nos locais apropriados indicados nos comentários.

Configurar a autenticação alternativa

O exemplo anterior conecta-se aos dados de origem com um token SAS antes de ler os dados em um DataFrame. Dependendo de onde seus dados são armazenados, talvez seja necessário usar um tipo de autenticação diferente, como a Entidade de Serviço ou o OAuth. Aqui está um exemplo de conexão a um Banco de Dados SQL do Azure com uma Entidade de Serviço:

# Azure SQL Database connection info
server_name = "your_server_name.database.windows.net"
port_number = 1433  # Default port number for SQL Server
database_name = "your_database_name"
table_name = "YourTableName" # Database table

client_id = "YOUR_CLIENT_ID"  # Service principal client ID
client_secret = "YOUR_CLIENT_SECRET"  # Service principal client secret

# Build the Azure SQL Database JDBC URL with Service Principal 
jdbc_url = f"jdbc:sqlserver://{server_name}:{port_number};database={database_name};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;Authentication=ActiveDirectoryServicePrincipal"

# Properties for the JDBC connection 
properties = {
    "user": client_id,
    "password": client_secret
            }

# Read table from Azure SQL Database using Entra ID Service Principal
sql_df = spark.read.jdbc(url=jdbc_url, table=table_name, properties=properties)

# Display the Azure SQL dataframe
display (sql_df)

Dica

Para obter mais informações sobre como se conectar usando a autenticação do Microsoft Entra, confira Conectar usando a autenticação do Microsoft Entra.

Gravar dados em um arquivo do lakehouse

Depois de se conectar aos seus dados e carregá-los em um dataframe, você pode salvá-los em um lakehouse. Por exemplo, o código a seguir salva um dataframe no formato Parquet, que dá suporte a dados estruturados, semiestruturados e não estruturados. O Parquet tem uma estrutura de armazenamento colunar otimizada e recursos de compactação eficientes.

# Write dataframe to Parquet file format
parquet_output_path = "Files/your_folder/your_file_name"

df.write.mode("overwrite").parquet(parquet_output_path)

print(f"DataFrame has been written to Parquet file: {parquet_output_path}")

Observação

Os lakehouses do Fabric também dão suporte a outros formatos de arquivo, incluindo texto delimitado, JSON, Delta, Avro, ORC e outros.

Gravar em uma tabela Delta

As tabelas Delta são um recurso fundamental dos lakehouses do Fabric porque dão suporte a transações ACID, um log de transações e muito mais. Você pode ingerir e carregar os seus dados externos em uma tabela Delta por meio de notebooks. As tabelas Delta são baseadas em Parquet com a adição de um arquivo de log. As tabelas do lakehouse são salvas no formato Delta, conforme indicado pelo ícone delta triangular (Δ) ao lado do nome da tabela na interface do usuário do Fabric.

O código a seguir salva uma tabela Delta:

# Write dataframe to Delta table
delta_table_name = "your_delta_table_name"
df.write.format("delta").mode("overwrite").saveAsTable(delta_table_name)

# Confirm load as Delta table
print(f"DataFrame has been written to Delta table: {delta_table_name}")

Dica

Saiba mais sobre tabelas Delta em Trabalhar com tabelas Delta Lake no Microsoft Fabric.

Otimizar as gravações na tabela Delta

O Spark é uma estrutura de processamento paralelo, com dados armazenados em um ou mais nós de trabalho, o que significa que ele é dimensionado bem para dados grandes. No entanto, a menos que gerenciado, o Spark pode armazenar um grande número de arquivos de dados pequenos, conhecidos como problema de arquivos pequenos, o que pode prejudicar o desempenho da consulta. V-Order e Otimizar gravação são opções de otimização habilitadas por padrão no Fabric.

  • O V-Order permite leituras mais rápidas e eficientes por vários mecanismos de computação, como Power BI, SQL e Spark. O V-Order aplica classificação, distribuição, codificação e compactação especiais em arquivos Parquet em tempo de gravação.
  • Otimizar a gravação melhora o desempenho e a confiabilidade aumentando o tamanho dos arquivos e, portanto, reduzindo o número de arquivos gravados. É útil para cenários em que as tabelas Delta têm tamanhos de arquivo abaixo do ideal ou não padrão ou em que a latência de gravação extra é tolerável.