Pular para o conteúdo principal

Escolher entre SQL e Python

Os LakeFlow Pipelines oferecem suporte a interfaces SQL e Python para definir pipelines em lotes e de transmissão. Ambas as interfaces produzem o mesmo gráfico de fluxo de dados subjacente, proporcionando funcionalidade equivalente para a maioria do processamento de dados. Eles diferem em flexibilidade, acessibilidade e cobertura de recursos.

Use esta orientação para decidir qual interface usar:

  • Se você puder expressar sua lógica em SQL, use SQL.
  • Caso seja necessário controle programático ou um recurso exclusivo de Python, utilize Python.
  • Se o senhor estiver mais confortável com Python, use Python. Cobre o conjunto completo de recursos do pipeline, então a familiaridade é motivo suficiente. O mesmo não é verdade no inverso: o SQL não abrange todos os recursos, então não o escolha apenas pela familiaridade.

Você também pode combinar ambas as interfaces no mesmo pipeline. Consulte Misturar SQL e Python.

Quando usar SQL

SQL é uma boa opção quando você quer:

  • **Definições legíveis e declarativas**: Lógica clara que os engenheiros de dados e analistas podem manter.
  • Tipos de tabela padrão : Pipelines construídos principalmente a partir de tabelas de transmissão e visualizações materializadas.
  • **Cadeias de transformações lineares**: Ingestão e transformação diretas, como um fluxo de bronze para prata para ouro, sem lógica procedural.
  • Tabelas autônomas: tabelas de transmissão autônomas ou views materializadas, que o senhor elabora em SQL.

Para uma visão geral de como desenvolver pipelines em SQL, consulte Desenvolver código de LakeFlow Pipelines com SQL.

Quando usar Python

Python é uma boa opção quando você precisa:

  • Controle programático : Loops, condicionais e metaprogramação para gerar definições de pipeline dinamicamente.
  • Bibliotecas externas : pacotes Python como faker ou boto3. Consulte Gerenciar dependências do Python para pipelines.
  • Funções definidas pelo usuário (UDFs): o senhor define UDFs em Python e pode chamá-las de arquivos de origem Python e SQL. Consulte Funções escalares definidas pelo usuário - Python.
  • Recursos somente para Python :
    • create_auto_cdc_from_snapshot_flow() para aplicar captura de dados de alterações (CDC) de um Snapshot de banco de dados.
    • create_sink() e foreach_batch_sink() para gravar em transmissão de eventos externos ou destinos Delta.

Para uma visão geral do desenvolvimento de pipelines em Python, consulte Desenvolver código de pipeline com Python.

Misturar SQL e Python

Um único pipeline pode combinar definições de SQL e Python, mas cada linguagem deve estar em um arquivo de origem separado. Por exemplo, você pode definir suas tabelas bronze e prata em Python e suas tabelas ouro em SQL.

Disponibilidade de recursos

A tabela a seguir compara como cada interface oferece suporte a recursos comuns de pipeline:

Recurso

SQL

Python

tabela de streaming

CREATE STREAMING TABLE

create_streaming_table(), table()

Visualização materializada

CREATE MATERIALIZED VIEW

materialized_view()

Visão materializada compatível com Iceberg (Pré-visualização Pública)

CREATE MATERIALIZED VIEW ... USING ICEBERG. Consulte Criar uma visão materializada compatível com leitores externos do Iceberg.

Não suportado

View temporária

CREATE TEMPORARY VIEW

temporary_view()

Tabela privada

CREATE PRIVATE STREAMING TABLE, CREATE PRIVATE MATERIALIZED VIEW

table(private=True)

CDC Automático

AUTO CDC ... INTO

create_auto_cdc_flow()

Auto CDC a partir de snapshot

Não suportado

create_auto_cdc_from_snapshot_flow()

Fluxo

CREATE FLOW

append_flow()

Afundar

Não suportado

create_sink(), foreach_batch_sink()

Expectativas

CONSTRAINT ... EXPECT

expect(), expect_or_drop(), expect_or_fail() e as variantes de expect_all

Resumo da decisão

Caso seja necessário...

Objetivo

Interface recomendada

Simplicidade e legibilidade

SQL

Configuração declarativa rápida

SQL

Tabela de transmissão autônoma ou view materializada

SQL

Lógica condicional ou de looping

Python

UDFs ou bibliotecas Python externas

Python

Auto CDC de Snapshot ou coletores

Python

Controle programático total e modularidade

Python