Pular para o conteúdo principal

Carregar dados com DLT

O senhor pode carregar dados de qualquer fonte de dados compatível com o site Apache Spark em Databricks usando DLT. O senhor pode definir o conjunto de dados (tabelas e visualizações) na DLT em relação a qualquer consulta que retorne um Spark DataFrame, incluindo a transmissão DataFrames e Pandas para Spark DataFrames. Para a tarefa de ingestão de dados, o site Databricks recomenda o uso de tabelas de transmissão para a maioria dos casos de uso. As tabelas de transmissão são boas para ingerir dados do armazenamento de objetos na nuvem usando Auto Loader ou de barramentos de mensagens como Kafka. Os exemplos abaixo demonstram alguns padrões comuns.

important

Nem todas as fontes de dados têm suporte para SQL. O senhor pode misturar SQL e Python Notebook em um DLT pipeline para usar SQL para todas as operações além da ingestão.

Para obter detalhes sobre como trabalhar com uma biblioteca que não seja pacote no DLT por meio do site default, consulte gerenciar dependências do Python para o pipeline DLT.

Carregar arquivos do armazenamento de objetos na nuvem

Databricks recomenda o uso do Auto Loader com DLT para a maioria das tarefas de ingestão de dados do armazenamento de objetos em nuvem. O Auto Loader e o DLT foram projetados para carregar de forma incremental e idempotente dados cada vez maiores à medida que eles chegam ao armazenamento em nuvem. Os exemplos a seguir usam Auto Loader para criar um conjunto de dados a partir dos arquivos CSV e JSON:

nota

Para carregar arquivos com o Auto Loader em um pipeline habilitado para o Unity Catalog, o senhor deve usar locais externos. Para saber mais sobre como usar Unity Catalog com DLT, consulte Usar Unity Catalog com seu pipeline DLT.

Python
@dlt.table
def customers():
return (
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "csv")
.load("/databricks-datasets/retail-org/customers/")
)

@dlt.table
def sales_orders_raw():
return (
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "json")
.load("/databricks-datasets/retail-org/sales_orders/")
)

Consulte O que é o Auto Loader? e Sintaxe SQL do Auto Loader.

atenção

Se o senhor usar Auto Loader com notificações de arquivo e executar um refresh completo para sua tabela pipeline ou de transmissão, deverá limpar manualmente o recurso. O senhor pode usar o CloudFilesResourceManager em um Notebook para realizar a limpeza.

Carregar dados de um barramento de mensagens

O senhor pode configurar o pipeline DLT para ingerir dados de barramentos de mensagens com tabelas de transmissão. Databricks recomenda a combinação de tabelas de transmissão com execução contínua e autoescala aprimorada para fornecer a ingestão mais eficiente para o carregamento de baixa latência de barramentos de mensagens. Consulte Otimizar a utilização de clustering do pipeline DLT com autoescala aprimorada.

Por exemplo, o código a seguir configura uma tabela de transmissão para ingerir dados de Kafka:

Python
import dlt

@dlt.table
def kafka_raw():
return (
spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "<server:ip>")
.option("subscribe", "topic1")
.option("startingOffsets", "latest")
.load()
)

O senhor pode escrever operações downstream em SQL puro para realizar transformações de transmissão nesses dados, como no exemplo a seguir:

SQL
CREATE OR REFRESH STREAMING TABLE streaming_silver_table
AS SELECT
*
FROM
STREAM(kafka_raw)
WHERE ...

Para obter um exemplo de como trabalhar com Event Hubs, consulte Use Azure Event Hubs as a DLT fonte de dados.

Consulte Configurar transmissão fonte de dados.

Carregar dados de sistemas externos

A DLT suporta o carregamento de dados de qualquer fonte de dados suportada pelo site Databricks. Consulte Conectar-se à fonte de dados. O senhor também pode carregar o uso externo de dados da Lakehouse Federation para fontes de dados compatíveis. Como o Lakehouse Federation requer o Databricks Runtime 13.3 LTS ou acima, para usar o Lakehouse Federation, o seu pipeline deve ser configurado para usar o canal de visualização.

Algumas fontes de dados não têm suporte equivalente em SQL. Se o senhor não puder usar a Lakehouse Federation com uma dessas fontes de dados, poderá usar um notebook Python para ingerir dados da fonte. O senhor pode adicionar código-fonte Python e SQL ao mesmo pipeline DLT. O exemplo a seguir declara um view materializado para acessar o estado atual dos dados em uma tabela PostgreSQL remota:

Python
import dlt

@dlt.table
def postgres_raw():
return (
spark.read
.format("postgresql")
.option("dbtable", table_name)
.option("host", database_host_url)
.option("port", 5432)
.option("database", database_name)
.option("user", username)
.option("password", password)
.load()
)

Carregar conjuntos de dados pequenos ou estáticos do armazenamento de objetos na nuvem

O senhor pode carregar um conjunto de dados pequeno ou estático usando a sintaxe de carregamento Apache Spark. O DLT é compatível com todos os formatos de arquivo suportados pelo Apache Spark no Databricks. Para obter uma lista completa, consulte Opções de formato de dados.

Os exemplos a seguir demonstram o carregamento de JSON para criar tabelas DLT:

Python
@dlt.table
def clickstream_raw():
return (spark.read.format("json").load("/databricks-datasets/wikipedia-datasets/data-001/clickstream/raw-uncompressed-json/2015_2_clickstream.json"))
nota

A construção SQL SELECT * FROM format.`path`; é comum a todos os ambientes SQL na Databricks. Esse é o padrão recomendado para acesso direto a arquivos usando SQL com DLT.

Acesse com segurança as credenciais de armazenamento com segredos em um pipeline

O senhor pode usar Databricks os segredos do site para armazenar credenciais, como chaves de acesso ou senhas. Para configurar o segredo em seu pipeline, use uma propriedade Spark na configuração de clustering das configurações pipeline. Consulte Configurar compute para um DLT pipeline.

O exemplo a seguir usa um segredo para armazenar um acesso key necessário para ler dados de entrada de um armazenamento Azure Data Lake Storage Gen2 (ADLS Gen2) account usando Auto Loader. O senhor pode usar esse mesmo método para configurar qualquer segredo exigido pelo seu pipeline, por exemplo, a chave AWS para acessar S3, ou a senha para um Apache Hive metastore.

Para saber mais sobre como trabalhar com o Azure Data Lake Storage Gen2, consulte Conectar-se ao Azure Data Lake Storage Gen2 e ao Blob Storage.

nota

O senhor deve adicionar o prefixo spark.hadoop. à configuração spark_conf key que define o valor do segredo.

JSON
{
"id": "43246596-a63f-11ec-b909-0242ac120002",
"clusters": [
{
"spark_conf": {
"spark.hadoop.fs.azure.account.key.<storage-account-name>.dfs.core.windows.net": "{{secrets/<scope-name>/<secret-name>}}"
},
"autoscale": {
"min_workers": 1,
"max_workers": 5,
"mode": "ENHANCED"
}
}
],
"development": true,
"continuous": false,
"libraries": [
{
"notebook": {
"path": "/Users/user@databricks.com/DLT Notebooks/DLT quickstart"
}
}
],
"name": "DLT quickstart using ADLS2"
}

Substituir

  • <storage-account-name> com o nome da account de armazenamento ADLS Gen2.
  • <scope-name> pelo nome do secret scope do Databricks.
  • <secret-name> pelo nome da chave que contém a chave de acesso da conta de armazenamento do Azure.
Python
import dlt

json_path = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-input-dataset>"
@dlt.create_table(
comment="Data ingested from an ADLS2 storage account."
)
def read_from_ADLS2():
return (
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "json")
.load(json_path)
)

Substituir

  • <container-name> com o nome do contêiner Azure storage account que armazena os dados de entrada.
  • <storage-account-name> com o nome da account de armazenamento ADLS Gen2.
  • <path-to-input-dataset> com o caminho para a entrada dataset.

Carregar dados dos Hubs de Eventos do Azure

Azure O Event Hubs é um serviço de transmissão de dados que oferece uma interface compatível com Apache Kafka . O senhor pode usar o conector de transmissão estruturada Kafka, incluído no tempo de execução do DLT, para carregar mensagens do Azure Event Hubs. Para saber mais sobre como carregar e processar mensagens dos Azure Event Hubs, consulte Use Azure Event Hubs as a DLT fonte de dados.