Choisir entre SQL et Python

Lakeflow Spark Declarative Pipelines (SDP) prend en charge les interfaces SQL et Python pour définir des pipelines de traitement par lots et de diffusion en continu. Les deux interfaces produisent le même graphe de flux de données sous-jacent, de sorte qu’elles fournissent des fonctionnalités équivalentes pour la plupart des traitements de données. Elles diffèrent en termes de flexibilité, d’accessibilité et de couverture des fonctionnalités.

Utilisez ces conseils pour déterminer l’interface à utiliser :

  • Si vous pouvez exprimer votre logique dans 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 complet de fonctionnalités de pipeline, donc la familiarité est suffisante. La même chose n’est pas vraie dans l’inverse : SQL ne couvre pas chaque fonctionnalité, donc ne le choisissez pas sur la familiarité seule.

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

Quand utiliser SQL

SQL convient bien lorsque vous souhaitez :

  • Définitions lisibles et déclaratives : logique claire que les ingénieurs de données et les analystes peuvent gérer.
  • Types de tables standard : pipelines créés principalement à partir de tables de streaming et de vues matérialisées.
  • Chaînes de transformation linéaires : ingestion et transformation simples, telles qu’un flux bronze-argent-or, sans logique procédurale.
  • Tables autonomes : tables de diffusion en continu autonomes ou vues matérialisées que vous créez dans SQL.

Pour obtenir une vue d’ensemble du développement de pipelines dans SQL, consultez Développer du code de pipelines déclaratifs Spark Lakeflow avec SQL.

Quand utiliser Python

Python est bien adapté quand vous avez besoin de :

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

Pour obtenir une vue d’ensemble du développement de pipelines dans Python, consultez Développer du code de pipeline avec Python.

Mélanger SQL et Python

Un pipeline unique 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 argent dans Python et vos tables d’or dans SQL.

Disponibilité des fonctionnalités

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

Feature SQL Python
table de streaming CREATE STREAMING TABLE create_streaming_table(), table()
vue matérialisée CREATE MATERIALIZED VIEW materialized_view()
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()
Flow CREATE FLOW append_flow()
Récepteur Non pris en charge create_sink(), foreach_batch_sink()
Expectations CONSTRAINT ... EXPECT expect(), expect_or_drop(), expect_or_fail() et les variantes expect_all

Résumé de la décision

Si vous en avez besoin...

Objectif Interface recommandée
Simplicité et lisibilité SQL
Configuration déclarative rapide SQL
Table de diffusion en continu autonome ou vue matérialisée SQL
Logique conditionnelle ou de boucle Python
Fonctions définies par l’utilisateur ou bibliothèques de Python externes Python
Capture de données modifiées automatique à partir d’instantanés ou de récepteurs Python
Contrôle et modularité de programmation complets Python