Chez Uber, la manipulation des données repose sur des requêtes SQL complexes. Avec des millions de transactions et interactions mensuelles, générer manuellement du SQL est coûteux en temps et source d’erreurs. QueryGPT a été conçu pour automatiser cette tâche en transformant une query en langage naturel en une requête SQL optimisée.
Contexte technique
- Environ 1,2M de requêtes SQL sont exécutées chaque mois
- Les datasets incluent des milliers de tables (environ 3 600) et schémas relationnels.
- Rédiger manuellement une requête nécessitait environ 10 minutes, avec une courbe d’apprentissage technique élevée.
QueryGPT permet de réduire ce temps à environ 3 minutes, ce qui entraîne une réduction notable des heures de développement et de débogage.
Architecture et fonctionnement
QueryGPT combine plusieurs modules techniques pour traduire du langage naturel en SQL. Voici ses principaux composants :
1. Input en langage naturel
L’utilisateur saisit une commande, par exemple :
"Combien de trajets annulés à Paris la semaine dernière ?"
Aucune connaissance SQL n’est requise; l’input est traité comme une string.
Source: uber.com
2. Recherche sémantique et vectorisation
Le système intègre :
- Un moteur de recherche vectorielle qui embed les requêtes en utilisant des LLM préalablement fine-tuned sur 18k exemples historiques.
- Ces embeddings facilitent l’association entre requêtes en langage naturel et schémas de données pertinents.
3. Sélection basée sur les métadonnées
Des algorithmes d’analyse de métadonnées et de patterns historiques identifient automatiquement :
- Les tables pertinentes dans un environnement avec 3 600 tables.
- Les colonnes importantes en se basant sur des règles de “pruning” pour éliminer les champs superflus.
4. Génération de la requête SQL
Utilisant un modèle de transformeur, QueryGPT construit une requête SQL compilée et optimisée.
- Le résultat est vérifié par des agents de scoring qui proposent plusieurs versions et évaluent leur confiance.
- La requête finale peut être utilisée directement ou ajustée via une interface d’édition.
Exemple d’utilisation
Considérez le cas d’un analyste qui code la question suivante :
"Nombre de livreurs ayant réalisé plus de 50 commandes/jour à Lyon en Q3 2024."
Voici le déroulé technique :
1. Conversion de la query en tokens via le LLM.
2. Recherche dans la base vectorielle pour identifier les tables (delivery_partners, orders, city_zones).
3. Application d’un algorithme de mapping pour associer chaque token à une colonne/table.
4. Exécution d’une fonction de “column pruning” pour extraire uniquement les champs nécessaires.
5. Génération et output de la requête SQL complète au runtime, prête à être lancée sur le cluster Presto.
Bénéfices techniques concrets
- Réduction du temps de génération de requêtes : +70% de gain de temps.
- Diminution des erreurs de code grâce à une automatisation basée sur des données historiques.
- Accessibilité pour les non-initiés au SQL, libérant ainsi les équipes techniques pour des travaux à plus forte valeur ajoutée.
- Amélioration continue : chaque requête validée alimente le modèle, augmentant sa précision de manière incrémentale.
Perspectives et évolutions
QueryGPT n’est pas figé :
- Version 2 (v2) en développement avec un chatbot interactif pour des itérations en temps réel.
- Intégration prévue avec des outils BI (Tableau, Looker) via API RESTful.
- Optimisation continue du modèle avec des données en streaming pour une meilleure adaptabilité.
Conclusion
QueryGPT est un microservice essentiel dans l’architecture data d’Uber. En automatisant la génération du SQL par le biais d’un LLM et d’algorithmes de matching, Uber a considérablement réduit le temps de développement de requêtes et minimisé les erreurs humaines.
Pour tout dev ou data engineer cherchant à optimiser son workflow SQL, QueryGPT représente une solution technique robuste et évolutive.