Application croisée Snowflake

Introduction
Lorsque vous écrivez une logique de jointure complexe dans SQL Server, l’opérateur CROSS APPLY vous offre plus de flexibilité que les jointures standard. Si vous utilisez Snowflake, vous constaterez peut-être qu’il ne prend pas en charge nativement CROSS APPLY. Cependant, Snowflake propose une alternative compatible.
À mesure que de nombreuses équipes migrent leurs charges de travail vers Snowflake, comprendre comment traduire des constructions héritées de SQL Server telles que CROSS APPLY devient essentiel. Ces modèles alimentent généralement des transformations au niveau des lignes, des filtrages dynamiques et des agrégations personnalisées, qui sont essentiels pour les pipelines d’analyse et de reporting. Connaître l’équivalent dans Snowflake garantit des migrations fluides et une conception de requêtes performante dans les environnements cloud modernes.
Cet article montre comment le comportement de Application croisée Snowflake peut être reproduit en utilisant LATERAL JOIN. Vous découvrirez également comment cela se compare à la syntaxe de SQL Server et comment écrire des requêtes performantes et sensibles aux lignes dans Snowflake.
Qu’est-ce que CROSS APPLY ?
Dans SQL Server, CROSS APPLY vous permet de joindre une table à une fonction renvoyant une table. SQL Server évalue la fonction pour chaque ligne et fusionne dynamiquement le résultat avec la ligne externe.
-- Utilisation de CROSS APPLY SELECT * FROM Person p CROSS APPLY ( SELECT * FROM Company c WHERE p.companyid = c.companyId ) Czip;
Dans de nombreux cas, vous pouvez reproduire la logique avec une simple jointure INNER JOIN :
-- INNER JOIN équivalent SELECT * FROM Person p INNER JOIN Company c ON p.companyid = c.companyId;
Équivalent de CROSS APPLY dans Snowflake
Bien que Snowflake ne prenne pas en charge CROSS APPLY directement, vous pouvez utiliser LATERAL JOIN pour obtenir le même effet. Cette syntaxe conforme à la norme ANSI permet à la sous-requête de référencer les colonnes de la table externe ligne par ligne.
-- Utilisation de LATERAL JOIN dans Snowflake SELECT * FROM Person p LEFT JOIN LATERAL ( SELECT * FROM Company c WHERE p.companyid = c.companyId ) Czip ON TRUE;
Si vous souhaitez un comportement plus proche de CROSS APPLY, optez pour INNER JOIN LATERAL.
Quand utiliser CROSS APPLY ou LATERAL JOIN
Toutes les jointures n’exigent pas l’utilisation de CROSS APPLY ou de LATERAL JOIN. Ces constructions excellent lorsque la sous-requête jointe dépend des valeurs de la ligne externe. Autrement dit, lorsque le côté droit doit être évalué pour chaque ligne de la table de gauche.
Les cas d’utilisation typiques incluent :
- Appeler des fonctions renvoyant une table qui reposent sur les valeurs de la ligne externe
- Appliquer des filtrages dynamiques ou des transformations au niveau des lignes
- Intégrer des agrégations corrélées ou une logique conditionnelle
Par exemple, si vous souhaitez joindre chaque utilisateur à sa dernière activité ou calculer une métrique basée sur des conditions spécifiques à chaque ligne, une jointure latérale évite des solutions de contournement compliquées. Elle est plus expressive que les jointures traditionnelles et plus propre que les sous-requêtes dans la clause SELECT.
Comportement du plan d’exécution
SQL Server et Snowflake traitent ces requêtes ligne par ligne :
- Le moteur parcourt la table principale de manière séquentielle.
- Il exécute la sous-requête pour chaque ligne.
- Le système joint immédiatement les résultats correspondants.
Une différence clé : SQL Server utilise par défaut des sémantiques internes avec CROSS APPLY, tandis que Snowflake emploie LEFT JOIN LATERAL dans la plupart des exemples afin de préserver les lignes externes sans correspondance.
Exemple : Commandes et Détails de commande
Imaginons que vous souhaitiez calculer le total des commandes en combinant deux tables :
-- Commandes CREATE TABLE Orders ( OrderID INT, CustomerID INT, OrderDate DATE ); -- Détails de commande CREATE TABLE OrderItems ( OrderID INT, ItemID INT, Quantity INT, Price DECIMAL(10, 2) ); -- Données d'exemple INSERT INTO Orders VALUES (1, 101, '2023-05-01'), (2, 102, '2023-05-02'), (3, 101, '2023-05-03'); INSERT INTO OrderItems VALUES (1, 1, 2, 10.00), (1, 2, 1, 15.00), (2, 1, 3, 10.00), (2, 3, 2, 20.00), (3, 2, 1, 15.00);
Utilisez maintenant LATERAL JOIN dans Snowflake pour calculer les totaux :
SELECT
o.OrderID,
o.CustomerID,
o.OrderDate,
oi.TotalAmount
FROM Orders o
LEFT JOIN LATERAL (
SELECT
OrderID,
SUM(Quantity * Price) AS TotalAmount
FROM OrderItems
WHERE OrderID = o.OrderID
GROUP BY OrderID
) oi ON TRUE;
Sortie attendue :
OrderID | CustomerID | OrderDate | TotalAmount --------+------------+-------------+------------- 1 | 101 | 2023-05-01 | 35.00 2 | 102 | 2023-05-02 | 70.00 3 | 101 | 2023-05-03 | 15.00
Conseils de performance pour LATERAL dans Snowflake
- Filtrer les lignes dès que possible dans votre sous-requête.
- Sélectionner uniquement les colonnes nécessaires pour réduire l’utilisation de la mémoire.
- Convertir la logique réutilisée en vues matérialisées si nécessaire.
- Suivre le coût d’exécution à l’aide du profileur de requêtes de Snowflake.
- Dimensionner votre entrepôt virtuel de manière appropriée en fonction de la concurrence et de la taille.
Résumé et Conclusion
Même si Snowflake ne possède pas d’opérateur CROSS APPLY, LATERAL JOIN réplique entièrement ses fonctionnalités. Vous pouvez migrer la logique de SQL Server en réécrivant les jointures avec INNER JOIN LATERAL ou LEFT JOIN LATERAL en fonction de votre objectif.
Une fois que vous aurez compris comment fonctionnent ces jointures, vous débloquerez de puissantes options de requêtes sensibles au contexte des lignes dans Snowflake, parfaites pour l’agrégation, les sous-requêtes et la logique multi-étapes.
À propos de DataSunrise
DataSunrise aide les organisations à sécuriser les bases de données Snowflake grâce à des outils puissants pour l’audit, le contrôle d’accès, le masquage des données et l’automatisation de la conformité. Notre plateforme unifiée fonctionne à la fois sur le cloud et sur site pour protéger les données sensibles en temps réel.
Si vous êtes prêt à découvrir comment DataSunrise peut aider à la sécurité et à la conformité de Snowflake, demandez une démo. Nos experts vous montreront comment intégrer notre solution à votre infrastructure de données, sans compromettre la performance.
Suivant
