Database
 sql >> Base de données >  >> RDS >> Database

Reconnaissance de modèle de ligne dans SQL

La norme ISO/IEC 9075:2016, ou SQL:2016 en abrégé, introduit la prise en charge d'un concept approfondi appelé Row Pattern Recognition (RPR) dans SQL. J'ai posté une suggestion pour améliorer SQL Server en ajoutant la prise en charge de RPR dans T-SQL, mais j'étais assez limité dans l'espace dont je disposais pour fournir des commentaires. Le but de cet article est de fournir plus de détails sur la proposition, et j'espère que vous serez convaincu de son importance et ajouterez votre vote.

Contexte

Semblable à l'utilisation d'expressions régulières pour identifier des modèles dans une chaîne, avec RPR, vous utilisez des expressions régulières pour identifier des modèles dans une séquence de lignes. Pour chaque correspondance de modèle, vous pouvez soit renvoyer une ligne récapitulative comme dans le regroupement, soit les lignes détaillées, avec des mesures calculées par rapport aux sous-séquences de la correspondance. RPR a des applications pratiques illimitées, y compris l'identification de modèles d'activité boursière (à la fois des modèles valides avec une valeur commerciale et des modèles potentiellement illégaux ou suspects), la gestion de séries chronologiques, la détection de fraude, la manutention de matériel, les applications d'expédition, le séquençage de l'ADN, les lacunes et les îles, haut N par groupe, et bien d'autres.

Pour moi, RPR est la prochaine étape dans l'évolution des fonctions de fenêtre, avec un niveau de sophistication plus élevé et une utilité étendue. Si vous pensez que les fonctions de fenêtre sont profondes et utiles, RPR va vraiment faire cuire votre nouille. Semblable aux fonctions de fenêtre, RPR prend en charge le partitionnement et la commande. Vous chercherez généralement des correspondances de modèles dans chaque partition indépendamment, en fonction de l'ordre indiqué. Également similaire aux fonctions de fenêtre, RPR se prête à une bonne optimisation, avec la possibilité de s'appuyer sur l'ordre des index pour éviter de trier les données.

Vous pouvez trouver une couverture du RPR, y compris des exemples illustrés, dans un rapport technique de 90 pages ISO/IEC TR 19075-5 (disponible gratuitement).

Vous pouvez également le trouver dans le cadre du document ISO/IEC 9075-2:2016, Technologies de l'information — Langages de base de données — SQL — Partie 2 :Foundation (SQL/Foundation) (disponible à l'achat).

La norme SQL:2016 fournit deux fonctionnalités principales liées au RPR :

  • Fonctionnalité R010, "Reconnaissance du modèle de ligne :clause FROM"
  • Fonctionnalité R020, "Reconnaissance du modèle de ligne :clause WINDOW"

La norme mentionne également la fonctionnalité R030, "Reconnaissance de modèle de ligne :prise en charge complète des agrégats", sans laquelle les fonctions d'agrégation ne sont pas autorisées à spécifier DISTINCT ou .

Jusqu'à présent, la seule plate-forme que je connaisse de cette fonctionnalité implémentée R010 est Oracle. Je ne connais aucune plate-forme qui ait encore implémenté R020.

Fonctionnalité R010, "Reconnaissance du modèle de ligne :clause FROM"

La fonctionnalité R010 définit un opérateur de clause/table appelé MATCH_RECOGNIZE, que vous utilisez dans la clause FROM. L'entrée est une table ou une expression de table et la sortie est une table virtuelle. Le contexte est similaire à celui d'autres opérateurs de table comme JOIN, APPLY, PIVOT et UNPIVOT. Voici la syntaxe d'une requête utilisant cette fonctionnalité :

SELECT