Approche descendante pour la migration du code SQL de Microsoft SQL Server vers Presto
Dans les projets de migration typiques, les données hébergées dans le serveur de base de données A (fourni par le fournisseur A) sont extraites, transformées et chargées dans le serveur de base de données B (fourni par le fournisseur B). Chacun de ces serveurs fournit un large éventail de fonctions pour interroger les données. Bien que les noms et les syntaxes des fonctions puissent varier, tous les serveurs de base de données du marché offrent une puissance et une flexibilité de requête maximales.
Un bloc de code est écrit comprenant de nombreuses fonctions pour effectuer une opération. Supposons que dans le serveur A, l'opération (Z1) peut être effectuée par une combinaison de fonctions (x1, y1…). Lors de la migration du code vers le serveur B, nous serions généralement tentés de trouver d'abord des fonctions de remplacement similaires (x2, y2…) qui peuvent ensuite être regroupées pour effectuer l'opération Z2. Mais ce faisant, dans de nombreux cas, nous pourrions ne pas être en mesure de reproduire la solution souhaitée et, par conséquent, de nous retrouver dans une impasse.
Z1 (x1 + y1…) ≠ Z2 (x2 + y2…)
, notre objectif doit être d'effectuer une approche descendante dans laquelle nous devons analyser l'opération Z1 et visualiser l'opération Z2. Trouvez ensuite les fonctions (i1, j1…) spécifiques au serveur B qui peuvent, une fois assemblées, exécuter Z2
Z1 (x1 + y1…) = Z2 (a2 + b2…)
Cas d'utilisation: Microsoft Serveur SQL
Supposons un exemple de la table Produits dans Microsoft SQL Server. Il y a 2 produits, A et B, vendus par 2 personnes chacun. Supposons que nous voulons la liste des vendeurs pour chaque produit (séparés par ';'). Ceci peut être réalisé en utilisant le code SQL ci-dessous
Le code pourrait être logiquement décomposé en blocs de code comme ci-dessous:
- ROW_NUMBER () over (partition by): Cette fonction attribue un numéro de ligne unique pour chaque ligne de chaque partition. La partition se produit ici par Product_Name (logiquement équivalent au regroupement)
- PIVOT – Pivotant le résultat basé sur Salesman pour num2, où les lignes deviennent des colonnes.
- Concaténation: utilisez l'opérateur + et le délimiteur pour concaténer: ([1] + ’;‘ + [2]) comme [Sales_People]
Notez que le code ci-dessus considère uniquement un cas où num 2 dans (1,2). Pour les cas où les produits ont plus de 2 vendeurs, le code ci-dessus doit être développé pour inclure tous les scénarios possibles.
Conversion Cas d'utilisation: Presto
Le code ci-dessus dans SQL Server peut être converti en un code pris en charge par Presto comme indiqué ci-dessous. Il produit les mêmes résultats que le code du serveur SQL.
Le code peut être logiquement décomposé en blocs de code comme ci-dessous:
- Group by: Les lignes sont regroupées par – based on Product_Name [19659020] Array_agg: un tableau est créé avec Salesman pour chaque groupe
- Array_join: les éléments du tableau sont joints à l'aide de l'opérateur ';'.
Notez que cela peut gérer n'importe quelle longueur de tableau dans la dimension X.
Pour résumer, nous pourrions dire qu'une approche descendante est plus efficace dans la migration des requêtes. Ainsi, la fonctionnalité finale d'un code Z1 est analysée puis décomposée en fonctions nécessaires pour effectuer l'opération finale.
Source link