Aller au contenu principal

Choisissez entre SQL et Python

Les LakeFlow Pipelines prennent en charge les interfaces SQL et Python pour la définition des pipelines batch et streaming. Les deux interfaces produisent le même graphe de flux de données sous-jacent, elles offrent donc des fonctionnalités équivalentes pour la plupart des traitements de données. Ils différent en matière de flexibilité, d'accessibilité et de couverture des fonctionnalités.

Utilisez ce guide pour décider de l’interface à utiliser :

  • Si vous pouvez exprimer votre logique en SQL, utilisez SQL.
  • Si vous avez besoin d’un contrôle programmatique ou d’une fonctionnalité Python uniquement, utilisez Python.
  • Si vous êtes plus à l'aise avec Python, utilisez Python. Il couvre l'ensemble des fonctionnalités du pipeline, la familiarité est donc une raison suffisante. L'inverse n'est pas vrai : SQL ne couvre pas toutes les fonctionnalités, ne le choisissez donc pas uniquement par familiarité.

Vous pouvez également combiner les deux interfaces dans le même pipeline. Consultez Mélanger SQL et Python.

Quand utiliser SQL

SQL est adapté lorsque vous souhaitez :

  • Définitions lisibles et déclaratives : une logique claire que les data engineers et les analystes peuvent maintenir.
  • Types de table standard : pipelines construits principalement à partir de tables de streaming et de vues matérialisées.
  • Chaînes de transformations linéaires : Ingestion et transformation simples, telles qu'un flux bronze-vers-argent-vers-Gold, sans logique procédurale.
  • **Tables autonomes** : tables de streaming autonomes ou vues matérialisées, que vous rédigez en SQL.

Pour un aperçu du développement de pipelines en SQL, voir Développer le code des LakeFlow Pipelines avec SQL.

Quand utiliser Python

Python convient bien lorsque vous avez besoin de :

  • **Contrôle programmatique** : boucles, conditionnelles et métaprogrammation pour générer des définitions de pipeline dynamiquement.
  • Bibliothèques externes : packages Python tels que faker ou boto3. Voir Gérer les dépendances Python pour les pipelines.
  • Fonctions définies par l'utilisateur (UDF) : Vous définissez les UDF en Python et pouvez les appeler à partir de fichiers sources Python et SQL. Consultez les fonctions scalaires définies par l'utilisateur Python (UDF).
  • Fonctionnalités Python uniquement :
    • create_auto_cdc_from_snapshot_flow() pour appliquer la capture des modifications de données à partir d’un instantané de base de données.
    • create_sink() et foreach_batch_sink() pour écrire vers des destinations de streaming d'événements externes ou Delta.

Pour un aperçu du développement de pipelines en Python, consultez Développer du code de pipeline avec Python.

Combiner SQL et Python

Un seul pipeline peut combiner des définitions SQL et Python, mais chaque langage doit se trouver dans un fichier source distinct. Par exemple, vous pouvez définir vos tables bronze et silver en Python et vos tables Gold en SQL.

Disponibilité des fonctionnalités

Le tableau suivant compare la façon dont chaque interface prend en charge les fonctionnalités courantes du pipeline :

Fonctionnalité

SQL

Python

table de streaming

CREATE STREAMING TABLE

create_streaming_table(), table()

vue matérialisée

CREATE MATERIALIZED VIEW

materialized_view()

Vue matérialisée compatible avec Iceberg (Aperçu public)

CREATE MATERIALIZED VIEW ... USING ICEBERGConsultez Créer une vue matérialisée compatible avec les lecteurs Iceberg externes.

Non pris en charge

Vue temporaire

CREATE TEMPORARY VIEW

temporary_view()

Table privée

CREATE PRIVATE STREAMING TABLE, CREATE PRIVATE MATERIALIZED VIEW

table(private=True)

CDC automatique

AUTO CDC ... INTO

create_auto_cdc_flow()

CDC automatique à partir d'un instantané

Non pris en charge

create_auto_cdc_from_snapshot_flow()

Flux

CREATE FLOW

append_flow()

Puits

Non pris en charge

create_sink(), foreach_batch_sink()

Attentes

CONSTRAINT ... EXPECT

expect(), expect_or_drop(), expect_or_fail() et les variantes expect_all

Fonctionnalité

SQL

Python

table de streaming

CREATE STREAMING TABLE

create_streaming_table(), table()

vue matérialisée

CREATE MATERIALIZED VIEW

materialized_view()

Vue matérialisée compatible avec Iceberg (Aperçu public)

CREATE MATERIALIZED VIEW ... USING ICEBERGConsultez Créer une vue matérialisée compatible avec les lecteurs Iceberg externes.

Non pris en charge

Vue temporaire

CREATE TEMPORARY VIEW

temporary_view()

Table privée

CREATE PRIVATE STREAMING TABLE, CREATE PRIVATE MATERIALIZED VIEW

table(private=True)

CDC automatique

AUTO CDC ... INTO

create_auto_cdc_flow()

CDC automatique à partir d'un instantané

Non pris en charge

create_auto_cdc_from_snapshot_flow()

Flux

CREATE FLOW

append_flow()

Puits

Non pris en charge

create_sink(), foreach_batch_sink()

Attentes

CONSTRAINT ... EXPECT

expect(), expect_or_drop(), expect_or_fail() et les variantes expect_all

Résumé des décisions

Si vous avez besoin de…

Objectif

Interface recommandée

Simplicité et lisibilité

SQL

Configuration déclarative rapide

SQL

Table de streaming autonome ou vue matérialisée

SQL

Logique conditionnelle ou de bouclage

Python

UDFs ou bibliothèques Python externes

Python

Auto CDC à partir de snapshot ou des récepteurs

Python

Contrôle programmatique complet et modularité

Python

Objectif

Interface recommandée

Simplicité et lisibilité

SQL

Configuration déclarative rapide

SQL

Table de streaming autonome ou vue matérialisée

SQL

Logique conditionnelle ou de bouclage

Python

UDFs ou bibliothèques Python externes

Python

Auto CDC à partir de snapshot ou des récepteurs

Python

Contrôle programmatique complet et modularité

Python