FR 3070074 A1 20190215 FR 1757682 A 20170814 PROCEDE DE COMPLETION DE REQUETE SQL DOMAINE DE L'INVENTION La présente invention concerne le domaine technique général des procédés de gestion de base de données. Plus précisément, la présente invention concerne le domaine des procédés d'interrogation d'une base de données. Notamment, la présente invention concerne un procédé pour la complétion de requête SQL. ARRIERE PLAN DE L'INVENTION Depuis 40 ans, les systèmes de gestion de bases de données (SGBD) ont connu un développement sans précédent. Aujourd'hui, les bases de données sont utilisées pour stocker un très grand nombre de données issues de sources multiples. Il est connu que ces données (ou 20 enregistrements) soient stockées dans des tables comportant chacune plusieurs attributs (ou champs). A titre indicatif, un exemple de table est illustré à la figure 1. Chaque ligne 1 a, 1 b, lc, Id de la table correspond à une donnée, et chaque colonne 2a, 2b, 2c, 2d 25 correspond à un attribut, la valeur prise par chaque attribut pouvant varier d'une donnée à une autre. Les bases de données étant souvent issues de l'intégration de systèmes existants, celles-ci peuvent être très complexes en ce qui concerne le nombre de table, le 30 nombre d'attributs par table, ainsi que la quantité de données stockées. 2 Pour rechercher des données dans une base de données, un langage de requête est utilisé. Une requête permet notamment d'obtenir le contenu de certains attributs de certaines tables, ceci en fonction de critères prédéterminés par un utilisateur et qui sont définis dans des filtres. 5 Un exemple de langage de requête utilisé pour interroger une base de données est le langage SQL (sigle de l'expression anglo-saxonne « Structured Query Language », signifiant « langage de requête structurée » en français). 10 La syntaxe de ce langage permet d'extraire des données provenant de sources multiples, de filtrer ces données, et de les recompiler en fonction de critères de recherche et de relations entre les tables, notamment pour les ordonner dans un tableau à deux dimensions. 15 Le langage SQL comporte de multiples mots clés afin de réaliser une ou plusieurs de ces actions dans le cadre d'une même requête. Ce langage est extrêmement puissant mais est réservé à des utilisateurs avertis ayant : - une très bonne maîtrise du langage, et - une connaissance fine de la (ou des) base(s) de données interrogée(s). 20 En particulier, afin de formuler une requête SQL, il est nécessaire de préciser : - les attributs pour lesquels des données sont recherchées, - les tables contenant ces attributs, - les filtres mis en oeuvre, ainsi que 25 - les relations entre les tables contenant les différents attributs, tels que définis dans la base. Or aujourd'hui, il est très rare qu'un utilisateur implémentant des requêtes SQL pour l'interrogation d'une base de données soit le concepteur de la base de données elle-30 même, de sorte qu'une connaissance du langage SQL n'est plus suffisante pour permettre l'interrogation d'une base de données. 3 Par ailleurs, avec la démocratisation de l'accès aux données, des utilisateurs sans connaissances spécifiques des SGBD sont amenées à implémenter des requêtes SQL, malgré leur peu de connaissance sur leur mode de fonctionnement. Un but de la présente invention est de proposer un procédé permettant de faciliter l'écriture de requêtes SQL. Plus précisément, un but de la présente invention est de proposer un procédé de complétion d'une requête SQL permettant de simplifier l'accès aux données contenues dans une base de données. BREVE DESCRIPTION DE L'INVENTION A cet effet, l'invention propose un procédé pour la génération de requêtes SQL comprenant les étapes suivantes : 15 - recevoir une requête SQL initiale saisie par un utilisateur (ou choisie par l'utilisateur lors d'une précédente itération du procédé), - déterminer un tableau résultant comprenant une pluralité de données extraites d'une base de données à partir de la requête SQL initiale, - diviser, en utilisant un algorithme de partitionnement de données, la pluralité de données contenues dans le tableau résultant en au moins des premier et deuxième groupes de données distincts : ales données du premier groupe satisfaisant au moins un premier critère de similarité, et ales données du deuxième groupe satisfaisant au moins un deuxième critère de similarité distinct du premier critère, - construire une structure arborescente de décision permettant la classification des premier et deuxième groupes, la structure arborescente comprenant une pluralité de noeuds et de règles de classification, - générer une pluralité de requêtes SQL complétées à partir des règles de classification de la structure arborescente, ladite pluralité de requêtes SQL complétées comprenant : 5 10 4 aune première requête SQL complétée pour le premier groupe, ladite première requête SQL permettant d'extraire de la base de données, les données contenues dans le premier groupe, aune deuxième requête SQL complétée pour le deuxième groupe, ladite 5 deuxième requête SQL permettant d'extraire de la base de données, les données contenues dans le deuxième groupe, - afficher sur des moyens d'affichage les première et deuxième requêtes SQL complétées. 10 Des aspects préférés mais non limitatifs du dispositif selon l'invention sont les suivants : - le procédé comprendre une étape de réception d'un nombre maximum de groupes pour le partitionnement des données, l'étape de partitionnement comprenant le classement de la pluralité de données dans une quantité de 15 groupes inférieure ou égale au nombre maximum de groupes ; - le procédé peut comprendre en outre : aune étape de réception d'une valeur seuil représentative d'un nombre maximal de valeurs distinctes que peut prendre un attribut utilisable pour définir les règles de classification, 20 aune étape de sélection parmi les attributs d'une donnée, des attributs dont le nombre de valeurs distinctes est inférieur au nombre maximal, ol'utilisation d'au moins un des attributs sélectionnés pour définir une règle de classification ; - le procédé peut comprendre en outre une étape de réception d'une profondeur 25 maximale pour la structure arborescente, l'étape de construction de la structure arborescente comprenant la génération de noeuds et de règles de classification de sorte que le nombre de noeuds entre la racine et chaque extrémité de la structure arborescente soit inférieur ou égale à la profondeur maximale moins un ; - la pluralité de données contenues dans le tableau résultant peut consister en un 30 sous-ensemble de l'ensemble des données extraites à partir de la requête initiale ; - la requête initiale comprend au moins : 5 aune instruction (« SELECT ») relative à la sélection d'au moins un attribut d'au moins une base de données, aune instruction (« FROM ») relative à la sélection d'au moins une table de la base de données dans laquelle rechercher chaque attribut 5 sélectionné, l'instruction relative à la sélection d'au moins un attribut n'étant pas prise en compte lors de l'étape consistant à déterminer le tableau résultant ; - l'étape consistant à générer des requêtes SQL complétées comprend, pour chaque groupe de données, l'insertion dans la requête initiale des règles de 10 classification associées audit groupe de données ; L'invention concerne également un produit programme d'ordinateur incluant des instructions de code programme enregistrées sur un support lisible par un ordinateur, pour mettre en oeuvre les étapes du procédé décrit ci-dessus lorsque ledit 15 programme est exécuté sur un ordinateur. BREVE DESCRIPTION DES DESSINS D'autres avantages et caractéristiques du procédé de complétion de requête SQL 20 selon l'invention ressortiront mieux de la description qui va suivre de plusieurs variantes d'exécution, données à titre d'exemples non limitatifs, à partir des dessins annexés sur lesquels : - La figure 1 est une représentation schématique d'une table d'une base de données, 25 - La figure 2 est une représentation schématique des différentes étapes du procédé de complétion de requête SQL, - La figure 3 est une représentation schématique du principe de fonctionnement de certaines étapes du procédé de complétion de requête SQL, - La figure 4 est une représentation schématique d'un système pour la mise en 30 oeuvre du procédé de complétion de requête SQL, 6 - La figure 5 est une représentation schématique d'une interface graphique adaptée au procédé de complétion de requête SQL. DESCRIPTION DETAILLEE DE L'INVENTION 5 On va maintenant décrire un exemple de procédé de complétion de requête SQL en référence aux figures 1 à 5. Dans ces différentes figures, les éléments équivalents sont désignés par la même référence numérique. 10 1. Généralités Le procédé de complétion de requête SQL est adaptable sur tout type de terminal incluant (cf figure 4) : - des moyens de traitement 10 - tels qu'un processeur et une mémoire - 15 programmés pour la mise en oeuvre du procédé, - des moyens d'affichage 20 - tels qu'un écran tactile - permettant notamment l'affichage de requêtes SQL à un utilisateur, - des moyens de saisie 30 - tels qu'un clavier - permettant à l'utilisateur l'écriture d'une requête SQL initiale. 20 Le terminal (sur lequel le procédé de complétion peut être programmé) est par exemple composé d'une (ou plusieurs) station(s) de travail, et/ou d'un (ou plusieurs) ordinateur(s) et/ou d'un téléphone portable, et/ou d'une tablette électronique (tel qu'un IPADO), un assistant personnel (ou « PDA », sigle de l'expression anglo- 25 saxonne « Personal Digital Assistant »), et/ou de tout autre type de terminal connu de l'homme du métier. En référence à la figure 2, on a illustré les différentes étapes du procédé de complétion de requête SQL. 30 Le procédé comprend : 7 - la réception 100 d'une requête SQL initiale saisie par un utilisateur, - l'obtention 200 d'un tableau résultant, - la partition 300 des données contenues dans le tableau résultant, - la construction 400 d'une structure arborescente à partir de la partition des 5 données, - la génération 500 de requêtes SQL à partir de l'arbre de décision, - l'affichage 600 des requêtes générées et le choix par l'utilisateur de l'une d'elle à partir d'un critère statistique (nombre de lignes retournées par le résultat de la complétion sur le nombre de lignes du résultat de la requête initiale) et du 10 « pattern » ou motif révélé par la complétion elle-même. 2. Description du procédé de complétion de requête SQL 2.1. Réception d'une requête SQL initiale 15 La première étape 100 du procédé concerne la réception d'une requête SQL initiale saisie par l'utilisateur. Comme décrit précédemment, une requête SQL est un texte qui donne un ordre à exécuter à un moteur de base de données sur une base de données. La requête SQL 20 peut mettre en jeu une ou plusieurs tables et peut être de complexité arbitraire, de quelques lignes à plusieurs pages. La requête initiale saisie par l'utilisateur peut être composée : - d'instruction en langage SQL, telles que les instructions : 25 o« SELECT » qui permet de sélectionner un (ou plusieurs) attribut(s) (i.e. colonne) d'intérêt d'une (ou plusieurs) table(s), 0« FROM » qui permet de sélectionner la (ou les) table(s) dans laquelle rechercher chaque enregistrement, 0« WHERE » qui permet de sélectionner les enregistrements (i.e. ligne 30 d'une table) respectant une condition, etc. 8 - d'informations relatives au contenu recherché telles que le (ou les) attribut(s) d'intérêt, la (ou les) table(s) d'intérêt, la (ou les) condition(s) que doivent satisfaire les enregistrement(s), etc. 5 La requête initiale saisie par l'utilisateur peut être précise (si l'utilisateur a une connaissance de la base de données manipulée) ou générique. Bien entendu, le résultat de la complétion de requête SQL proposée par le procédé dépend de la précision de la requête saisie initialement par l'utilisateur. Néanmoins, 10 même si une requête générique est initialement saisie par l'utilisateur, une succession de requêtes SQL complétées lui sera proposé. Il pourra par la suite affiner sa recherche en intégrant l'une des requêtes SQL complétée en tant que requête initiale. Le processus est en ce sens « itératif », et aide l'utilisateur à spécifier ses données d'intérêts. 15 2.2. Obtention d'un tableau résultant La deuxième étape 200 du procédé consiste à obtenir un tableau résultant. Ce tableau résultant est obtenu à partir de la requête SQL initiale, en fonction des 20 instructions et informations qu'elle contient, et notamment de la (ou les) table(s) dans laquelle l'utilisateur souhaite que les données soient extraites. L'exécution de cette requête SQL initiale permet l'extraction d'un ensemble de données. 25 Avantageusement lorsque le nombre de données de l'ensemble de données est trop important, le tableau résultant peut comprendre uniquement une partie des données de l'ensemble de données, en limitant la taille de la sortie par exemple en procédant par échantillonnage ou en ajoutant un filtre SQL. Ceci permet de limiter la durée de la 30 deuxième étape d'extraction des données à partir de la requête initiale, ainsi que la durée de traitement des étapes suivantes du procédé. 9 Par exemple lorsque le nombre de données obtenues à partir de la requête initiale dépasse une valeur seuil, l'étape d'obtention du tableau résultant peut être interrompue. Dans ce cas, le tableau résultant ne comprend qu'un sous-ensemble de 5 données appartenant à l'ensemble de données que l'exécution de la requête initiale permet d'extraire. Si la requête initiale projette le résultat sur un sous-ensemble d'attributs, notamment 10 avec une instruction « SELECT » pour la sélection d'un (ou plusieurs) attribut(s) d'intérêt, elle n'est pas considérée lors de l'obtention du tableau résultant : tous les attributs possibles sont gardés. Ainsi, les données sont extraites dans leur intégralité afin de maximiser les possibilités d'apprentissage à partir des données. 15 En effet, l'unique prise en compte des attributs d'intérêt peut s'avérer insuffisante pour une mise en oeuvre efficace du procédé. Le fait d'extraire tous les attributs associés à une donnée lors de l'étape d'obtention du tableau résultant autorise la prise en compte d'autres attributs que les attributs d'intérêt, notamment lors des étapes suivantes de partitionnement et de construction de la structure arborescente. 20 2.3. Partition des données La troisième étape 300 du procédé consiste à partitionner les données contenues dans le tableau résultant. Plus précisément, les données contenues dans le tableau 25 résultant sont divisées en groupes en utilisant un algorithme de partitionnement de données. Le partitionnement de données (ou « data clustering » en anglais) est une méthode d'analyse des données visant à diviser un ensemble de données en différents « 30 groupes » homogènes de données, les données de chaque groupe partageant des caractéristiques communes, qui correspondent le plus souvent à des critères de 10 proximité (similarité informatique) définis en introduisant des mesures et classes de distance entre objets. Les méthodes de partitionnement des données sont bien connues de l'homme du 5 métier et ne seront pas décrites plus en détails dans la suite. Dans le cadre de la présente invention, différentes méthodes de partitionnement de données peuvent être utilisées en fonction de l'application visée, parmi lesquelles : - Les méthodes basées centroïdes (telles que les algorithmes des k-moyennes 10 ou k-médoïdes), - Les méthodes de regroupement hiérarchique ; - Les méthodes de maximisation de l'espérance (EM) ; - Les méthodes basées sur la densité (telles que DBSCAN ou OPTICS) - etc. 15 A l'issue de l'étape de partitionnement, les données contenues dans le tableau résultant sont classées en groupes distincts cl, c2, c3 (c'est-à-dire qu'une donnée appartenant à un groupe cl ne peut pas appartenir à un autre groupe c2, c3). 20 Par exemple, les données du tableau résultant peuvent être séparées dans des premier et deuxième groupes : - les données du premier groupe satisfaisant au moins un premier critère de similarité, et - les données du deuxième sous-ensemble satisfaisant au moins un deuxième 25 critère de similarité distinct du premier critère, les premier et deuxième groupes contenant des données différentes. Dans certaines variantes de réalisation, le procédé peut comprendre une étape de réception d'un nombre maximal de groupes souhaité par l'utilisateur. Dans ce cas, les 30 données sont classées dans une quantité de groupes limitée au nombre maximal de 11 groupes souhaité par l'utilisateur. Ceci permet à l'utilisateur de choisir un degré de finesse pour la partition en fonction de ses besoins. 2.4. Construction d'un arbre de décision 5 La quatrième étape 400 du procédé consiste à construire une structure arborescente de décision (également connue sous le nom « d'arbre de décision »). Les Générateurs d'arbres de décision sont des systèmes d'analyse automatisée de 10 données. Ils permettent d'analyser de grandes quantités de données, et de construire une structure arborescente permettant de décrire la façon de déterminer un groupe de données cible en fonction d'un ensemble d'attributs explicatifs. Un « attribut explicatif» est un attribut pertinent pour la construction de la structure 15 arborescente. Tous les attributs d'une donnée ne sont pas forcément pertinents pour décrire la façon de déterminer un groupe de données cible. Par exemple, un attribut dont la valeur n'est jamais la même d'une donnée à l'autre dans une table (par exemple l'attribut « taille » 2e de la table illustré à la figure 1) ne permet pas de définir des groupes de données, mais uniquement des données singulières dans la 20 table. Un arbre de décision (aussi appelé arbre de classification) est composé de noeuds et de feuilles : - chaque noeud (i.e. jonction entre deux branches de l'arbre) constitue un test 25 portant sur la valeur d'un attribut explicatif des données à classer ; - chaque feuille (i.e. terminaison libre d'une branche non connectée à d'autres branches) correspond à une collection de données respectives. De préférence, la construction de la structure arborescente continue jusqu'à ce que 30 les données contenues dans chaque collection appartiennent toutes à un unique groupe. On dit alors que les données de la collection sont homogènes. Dans le cas 12 d'une collection homogène, les données d'une feuille de la structure arborescente peuvent donc correspondre à: - La totalité des données d'un groupe (collections c2 et c3 de l'arbre 50 illustré sur la figure 3), ou 5 - Une partie des données d'un groupe (collections cl de l'arbre 50 illustré à la figure 3) ; dans ce cas, plusieurs feuilles doivent être combinées pour aboutir au groupe d'intérêt pour lequel on souhaite générer une requête SQL permettant l'extraction dans la base de données, des données du groupe. 10 On comprend de ce qui précède que la structure arborescente de décision peut comprendre plus de feuilles que le nombre de groupes obtenus en sortie de l'étape de partition. Dans certaines variantes de réalisation de l'invention, le procédé peut comprendre 15 une étape préalable de réception d'une valeur seuil représentative d'un nombre maximal de valeurs distinctes que peut prendre un attribut pertinent pour la réalisation de tests dans la structure arborescente. Ceci permet à l'utilisateur de définir quels attributs peuvent être utilisés afin de décrire la façon de déterminer un groupe dans la structure arborescente (i.e. quels attributs peuvent être utilisés dans 20 les noeuds tests). Par exemple dans le cas de la table illustrée à la figure 1, si la valeur seuil est définie comme étant égale à 2, l'attribut « prénom » 2a sera considéré comme non pertinent lors de la construction de la structure arborescente (et ne sera donc pas utilisé pour 25 un test dans les noeuds de la structure), tandis que l'attribut « sexe » sera considéré comme pertinent (et pourra donc être utilisé pour un test dans un noeud s'il s'avère pertinent pour décrire un groupe). Le procédé peut également comprendre une étape de réception d'une profondeur 30 maximale pour la structure arborescente. 13 2.5. Génération de requêtes SQL La cinquième étape 500 du procédé consiste à générer des requêtes SQL à partir de la structure arborescente construite à l'étape précédente. 5 Comme indiqué précédemment, chaque collection peut consister en une partie ou la totalité des données d'un groupe. Lorsque toutes les données d'un groupe sont contenues dans une collection de 10 données, la génération d'une requête SQL associée consiste à collecter le (ou les) test(s) des différents noeuds permettant d'aboutir à la collection considérée. Comme indiqué précédemment, chaque test porte sur une valeur d'un attribut des données à classer. Chaque test est converti en une clause additionnelle à ajouter à la requête initiale reçue de l'utilisateur. La concaténation des différentes clauses additionnelles à 15 la requête initiale permet de générer une requête complétée dont l'exécution sur la base de données induit l'extraction des données du groupe. Lorsque les données d'un groupe sont contenues dans plusieurs collections de données, la génération d'une requête SQL associée consiste à collecter les tests des 20 différents noeuds permettant d'aboutir aux différentes collections dont l'union forme le groupe. Une fois collectés, les tests sont convertis en clauses additionnelles permettant la sélection des données (instructions « WHERE » / «AND ») des différentes collections. Ces clauses additionnelles sont ajoutées à la requête SQL reçue de l'utilisateur pour former une requête complétée permettant l'extraction (de la 25 base de données) des données du groupe lorsque ladite requête est exécutée. Chaque requête ainsi générée permet d'extraire les données d'un groupe respectif. L'étape de génération de requêtes SQL permet de générer un nombre de requêtes égal au nombre de groupes obtenus lors de l'étape de partitionnement. 30 2.6. Affichage 14 La sixième étape du procédé consiste à afficher les requêtes SQL générées sur des moyens d'affichage tel qu'un écran. 5 Ceci permet à l'utilisateur de sélectionner parmi l'ensemble des requêtes complétées, celle présentant un intérêt pour lui. Si l'utilisateur considère que les requêtes complétées ne permettent pas une sélection suffisamment limitée par rapport à ses besoins, celui-ci peut alors remplacer 10 la requête initiale par l'une des requêtes complétées. Jusqu'à satisfaction de l'utilisateur, les étapes du procédé peuvent alors être réitérées pour affiner les résultats et générer des requêtes complétées plus précises correspondant à ce qu'il ou elle avait à l'esprit. 15 2.7. Principe de fonctionnement En référence aux figures 2, 3 et 5, le principe de fonctionnement du procédé est le suivant. 20 L'utilisateur utilise les moyens de saisi 30 pour saisir une requête SQL initiale dans une fenêtre de dialogue 5 prévue à cet effet. Dans certains modes de réalisation, il peut également spécifier : - un nombre maximal de groupes souhaité, par exemple à l'aide d'une première 25 règle virtuelle 6, - une valeur seuil représentative d'un nombre maximal de valeurs distinctes que peut prendre un attribut, par exemple à l'aide d'une deuxième règle virtuelle 7 - une profondeur maximale pour la structure arborescente, par exemple à l'aide 30 d'une troisième règle virtuelle 8. 15 A partir d'une requête initiale saisie par un utilisateur, les moyens de traitement 10 du terminal extraient d'une base de données 40 les données satisfaisant la requête initiale. Ces données extraites sont stockées dans le tableau résultant (Ans Q, d). 5 Les données contenues dans le tableau résultant sont ensuite classées par groupe cl, c2, c3. Le classement d'une donnée dans un groupe est fonction de sa similarité avec les autres données du groupe. Pour classer les données par groupes, différentes méthodes de partitionnement (« k-means », « k-modes », etc.) connues de l'homme du métier peuvent être utilisées. 10 Une structure arborescente 50 (également connue sous le nom « d'arbre de décision ») est construite à partir des groupes ainsi formés. Au cours de la construction de cette structure arborescente, des conditions seuil relatives aux valeurs que peuvent prendre certains attributs des différentes données sont 15 déterminées. Ces conditions seuils permettent de définir des critères que satisfont les données de chaque groupe. Pour construire une structure arborescente à partir des données, différentes méthodes connues de l'homme du métier peuvent être utilisées. Les conditions seuil de la structure arborescente sont ensuite utilisées pour formuler 20 des requêtes SQL complétées Rcl , Rc2, Rc3, (en intégrant les conditions seuil dans la requête initiale), chaque requête SQL complétée Rcl , Rc2, Rc3 permettant d'extraire de la base de données, les données d'un groupe respectif cl, c2, c3. Ces requêtes SQL complétées Rcl, Rc2, Rc3 sont ensuite affichées à l'utilisation, 25 par exemple dans une fenêtre de dialogue 9. 2.8. Résumé Le procédé décrit précédemment permet de générer des requêtes SQL complétées à 30 partir d'une requête initiale saisie par l'utilisateur. Contrairement aux solutions 16 existantes, le procédé selon l'invention est centré sur les données de la requête, c'est-à-dire sur la sémantique que véhicule la requête à travers ses données. Ce procédé facilite l'écriture de requête SQL pour l'utilisateur, notamment dans des 5 contextes complexes (volume important de données, complexité du schéma de base (nombre de tables, nombre d'attribut par table), nommage des attributs peu explicite, manque de connaissance de l'utilisateur, etc.). Plus spécifiquement, le procédé décrit précédemment permet à l'utilisateur, en 10 commençant par une requête initiale quelconque (qui peut être très générale et donc facilement exprimable en SQL), de la raffiner par complétion (en spécifiant des clauses additionnelles de sélection de données) jusqu'à aboutir aux données recherchées par l'utilisateur. 15 Le procédé selon l'invention permet de diminuer le temps passé par un utilisateur pour concevoir des requêtes SQL. De plus, chaque requête complétée contient elle-même de l'information concernant la structure de la base de données (outre les données qu'elle permet d'extraire de la base de données en l'exécutant). Ainsi, les requêtes complétées peuvent permettre de révéler des motifs dans les données dont 20 l'utilisateur n'avait pas forcément conscience initialement. On va maintenant décrire plus en détail les grands principes associés au procédé selon l'invention. 25 3. Théorie relative à l'invention Avec la prolifération des données connue sous le terme « mégadonnées » (ou « big data » en anglai), les volumes de données traitées sont devenus de plus en plus conséquent. 30 17 Cette augmentation du volume de données a directement impacté les bases de données, qui ont tendance à contenir plus de tables (parfois des centaines), dont certaines peuvent elles-mêmes contenir de très nombreux attributs (parfois des milliers de colonnes). Cela donne lieu à des structures complexes, pour lesquels il 5 peut alors être difficile d'être rigoureux, notamment en ce qui concerne la dénomination associée à chaque attribut. Par exemple, les inventeurs ont été amenés à étudier une base de données dans laquelle une table comprenant 1200 colonnes, intitulées Data0001, Data0002, et ainsi 10 de suite jusqu'à Data1200. Dès lors que l'on souhaite interroger une telle base, la formulation d'une requête SQL devient complexe, voire impossible sans connaissance des entités physiques et structurelles associées à chaque attribut. 15 Cet exemple n'est pas un cas isolé, et de manière générale, un analyste passe plus de temps à formuler une requête SQL qu'il n'en faut au SGBD pour l'évaluer et retourner le résultat. 20 Dans ces conditions, il semble nécessaire de concevoir des solutions permettant une aide à la formulation de requêtes. Si des aides syntaxiques existent déjà, pour suggérer des mots clés ou des éléments connus du schéma, cela n'apporte aucun élément nouveau à un analyste vis-à-vis 25 des données elles-mêmes. C'est pourquoi les inventeurs ont développé un procédé de complétion de requête SQL basé sur les données, c'est-à-dire prenant en compte les informations sur le contenu même de la base de données. 30 18 L'objectif du procédé de complétion de requête SQL est de proposer des complétions de requête SQL, c'est-à-dire, en partant d'une requête initiale, de garder cette requête, mais de lui ajouter des conditions permettant de la rendre plus spécifique et donc de renvoyer moins de résultats. Ainsi, on espère pouvoir donner à l'utilisateur 5 une complétion le menant groupe de données d'intérêt. Dans la suite, on présentera le procédé de complétion en référence à l'adjonction de conditions au niveau d'une clause « Where » de la requête SQL. Il est bien entendu pour l'homme du métier que le procédé de complétion décrit ci-dessous peut 10 s'appliquer à l'ajout de conditions sur d'autres clauses que la clause « Where » de la requête SQL initial. Pour schématiser, on peut considérer le problème de complétion en référence à la requête ci-dessous : 15 Select... From... Where... Qi Clauses additionnelle And... And... And... 20 Où: - Q représente la requête initiale, et - Qi une complétion de Q. Le procédé de complétion de requête SQL proposé est basé sur l'utilisation de techniques d'apprentissage automatique. 25 19 Pour trouver des complétions à partir d'une requête initiale Q dont on connaît l'évaluation ans(Q, d) sur une base de données, on peut se baser sur une méthode incluant les deux étapes ci-dessous : - la division de ans(Q, d) en différents groupes de tuples, 5 - la recherche d'une requête pour chaque groupe telle que le résultat de cette requête retourne les tuples du groupe. Pour réaliser ces deux étapes, il est possible d'utiliser deux méthodes bien connues dans le monde de l'apprentissage automatique. 10 Concernant l'étape de division de ans(Q, d), un algorithme de partitionnement (« clustering » en anglais) peut être utilisé. En effet, l'objectif étant de diviser un ensemble de données en différents groupes, cette méthode est adaptée. Bien entendu d'autres méthodes pourraient être utilisées. Par exemple les tuples 15 pourraient être séparés de manières aléatoires pour les répartir dans différents groupes. Mais l'utilisation du partitionnement permet de faire une séparation basée sur les données elles-mêmes, et donc de faire une séparation ayant un sens. Une fois les données séparées, on souhaite trouver les requêtes permettant d'obtenir 20 ces différents groupes. On cannait une partie de la requête que l'on souhaite trouver (issue de la requête initiale). Ainsi pour chaque groupe, l'étape de recherche d'une requête consiste à trouver des clauses additionnelles à ajouter à la requête initiale Q pour obtenir la bonne complétion Q' permettant d'obtenir l'ensemble de résultats souhaité. 25 Un arbre de décision peut être utilisé pour passer de l'ensemble de résultat connus à une requête SQL. Un arbre de décision est un algorithme supervisé, c'est-à-dire que les données sur lesquelles il se construit doivent être labellisés afin que l'arbre apprenne à discriminer entre les différentes classes. 30 20 Dans le cas présent, l'étape préalable de partitionnement permet une labellisation des données par groupe, en considérant que le groupe auquel un tuple appartient correspond à sa classe. Un parcours de l'arbre permet ensuite d'obtenir les conjonctions de classe menant à une feuille représentant une classe donnée. Ces 5 clauses sont directement injectables dans la requête initiale. On peut donc représenter le processus de complétion comme sur la figure 2. A partir de l'évaluation d'une requête initiale sur une base de données, on applique un partitionnement pour obtenir différents groupes de tuples. Un arbre de décision est 10 ensuite utilisé pour discriminer entre les groupes, et ses clauses de décisions sont utilisées pour construire des complétions. Ce processus à l'avantage d'être complètement transparent à l'utilisateur, qui reste ainsi dans le monde des requêtes SQL sans avoir besoin de comprendre réellement 15 ce qui se passe en arrière-plan. En effet, l'utilisateur n'a qu'à fournir une requête initiale en entrée, pour en obtenir plusieurs complétions possibles en sortie. Ainsi, la couche supplémentaire d'apprentissage automatique est « cachée » puisque l'utilisateur reste dans l'environnement habituel en n'ayant à manipuler que des 20 requêtes SQL. Une version en pseudo-code de l'algorithme de la solution proposée est donnée en annexe à titre d'exemple. 25 L'homme du métier appréciera que dans ce pseudocode, une version maximisée de la requête initiale Q est utilisée. Cette maximisation se fait au niveau de la projection des attributs de la requête. En effet ceux-ci déterminent les attributs présents dans ans(Q, d), et donc les données sur lesquels les méthodes de partitionnement et d'arbre de décision vont apprendre. 30 21 Or les algorithmes d'apprentissage sont forcément très sensibles aux données, et les attributs spécifiés par l'utilisateur peuvent complètement modifier le résultat de la complétion. 5 L'utilisateur peut par exemple ne pas sélectionner des attributs qui auraient pourtant été les plus pertinents. L'étape de maximisation vise donc à sélectionner le plus d'attributs possible afin d'élargir autant que possible le champ d'apprentissage, et de pouvoir guider l'utilisateur sur des attributs auquel il n'aurait pas forcément pensé. 10 Bien entendu dans d'autres modes de réalisation du procédé, une version non maximisée de la requête initiale peut être utilisée. Le lecteur aura compris que de nombreuses modifications peuvent être apportées à l'invention décrite précédemment sans sortir matériellement des nouveaux 15 enseignements et des avantages décrits ici. Par conséquent, toutes les modifications de ce type sont destinées à être incorporées à l'intérieur de la portée des revendications jointes. 20 22 ANNEXE ' 5 Algorithrn 1: Query completion procedure proci,dure Completion (Q. d) Input : A query Q over R. and a database d over R Output: Se a set of completions of Q Qum, = maxiiniseAltrilniles(Q, (I) 1%11 ans(Q,,, ; // wd: working data iwd cluster(wd) ; // lwd: labelled working data trt = gel DeeisiOnTree(lw(1) conjotict ions - gel Rides t tee) Sr = El foreaeh r in ronjunrtunis do Sr+ cre(Q) REVENDICATIONS1. Procédé pour la génération de requêtes SQL mis en oeuvre dans un terminal incluant des moyens de traitement, des moyens d'affichage et des moyens de saisie, le procédé comprenant les étapes suivantes : - recevoir (100) une requête SQL initiale saisie par un utilisateur sur les moyens de saisie (30) (ou choisie par l'utilisateur lors d'une précédente itération du procédé), déterminer (200) un tableau résultant comprenant une pluralité de données extraites par les moyens de traitement (10) d'une base de données à partir de la requête SQL initiale, diviser (300), en utilisant un algorithme de partitionnement de données, la pluralité de données contenues dans le tableau résultant en au moins des premier et deuxième groupes de données distincts : o les données du premier groupe (cl) satisfaisant au moins un premier critère de similarité, et o les données du deuxième groupe (c2) satisfaisant au moins un deuxième critère de similarité distinct du premier critère, - construire (400) en utilisant un générateur d'arbre de décision une structure arborescente de décision (50) permettant la classification des premier et deuxième groupes (cl, c2), la structure arborescente comprenant une pluralité de noeuds et de règles de classification, - générer (500) une pluralité de requêtes SQL complétées à partir des règles de classification de la structure arborescente, ladite pluralité de requêtes SQL complétées comprenant : o une première requête SQL complétée (Rcl) pour le premier groupe (cl), ladite première requête SQL permettant d'extraire de la base de données, les données contenues dans le premier groupe, o une deuxième requête SQL complétée (Rc2) pour le deuxième groupe (c2), ladite deuxième requête SQL permettant d'extraire de la base de données, les données contenues dans le deuxième groupe, - afficher (600) sur des moyens d'affichage (20) les première et deuxième requêtes SQL complétées. 24 2. Procédé selon la revendication 1, lequel comprend une étape de réception d'un nombre maximum de groupes pour le partitionnement des données saisi par l'utilisateur sur les moyens de saisie (30), l'étape de partitionnement comprenant le classement de la pluralité de données dans une quantité de groupes inférieure 5 ou égale au nombre maximum de groupes. 3. Procédé selon la revendication 1, lequel comprend en outre : une étape de réception d'une valeur seuil saisie par l'utilisateur sur les moyens de saisie (30) et représentative d'un nombre maximal de valeurs 10 distinctes que peut prendre un attribut utilisable pour définir les règles de classification, une étape de sélection parmi les attributs d'une donnée, des attributs dont le nombre de valeurs distinctes est inférieur au nombre maximal, l'utilisation d'au moins un des attributs sélectionnés pour définir une règle de 15 classification. 4. Procédé selon la revendication 1, lequel comprend en outre une étape de réception d'une profondeur maximale pour la structure arborescente, l'étape de construction de la structure arborescente comprenant la génération de noeuds et 20 de règles de classification de sorte que le nombre de noeuds entre la racine et chaque extrémité de la structure arborescente soit inférieur ou égale à la profondeur maximale moins un. 5. Procédé selon la revendication 1, dans lequel la pluralité de données contenues 25 dans le tableau résultant consiste en un sous-ensemble de l'ensemble des données extraites à partir de la requête initiale. 6. Procédé selon la revendication 1, dans lequel la requête initiale comprend au moins : 30 - une instruction (« SELECT ») relative à la sélection d'au moins un attribut d'au moins une base de données, - une instruction (« FROM ») relative à la sélection d'au moins une table de la base de données dans laquelle rechercher chaque attribut sélectionné, 25 l'instruction relative à la sélection d'au moins un attribut n'étant pas prise en compte lors de l'étape consistant à déterminer le tableau résultant. 7. Procédé selon la revendication 1, dans lequel l'étape consistant à générer des 5 requêtes SQL complétées comprend, pour chaque groupe de données, l'insertion dans la requête initiale des règles de classification associées audit groupe de données. 8. Produit programme d'ordinateur incluant des instructions de code programme 10 enregistrées sur un support lisible par un ordinateur, pour mettre en oeuvre les étapes du procédé selon l'une des revendications précédentes lorsque ledit programme est exécuté sur un ordinateur.