Préparer les tables
Nous allons apprendre à utiliser cette fonction à l’aide de la base de données des matchs ATP de TennisMyLife. Nous allons traiter des fichiers CSV contenant des matchs qui remontent aux années 1960, mais nous créerons un schéma légèrement différent pour chaque décennie. Nous ajouterons également quelques colonnes supplémentaires pour les années 1990. Les instructions d’importation sont indiquées ci-dessous :Schéma de plusieurs tables
Nous pouvons exécuter la requête suivante pour afficher les colonnes de chaque table et leurs types côte à côte, afin de repérer plus facilement les différences.- Dans les années 1970, le type de
winner_seedpasse deNullable(String)àNullable(UInt8)et celui descoredeStringàArray(String). - Dans les années 1980,
winner_seedetloser_seedpassent deNullable(UInt8)àNullable(UInt16). - Dans les années 1990,
surfacepasse deStringàEnum('Hard', 'Grass', 'Clay', 'Carpet')et les colonneswalkoveretretirementsont ajoutées.
Interroger plusieurs tables avec merge
Écrivons une requête pour trouver les matchs que John McEnroe a remportés contre un joueur tête de série n° 1 :winner_seed utilise des types différents selon les tables :
variantType pour vérifier le type de winner_seed pour chaque ligne, puis variantElement pour en extraire la valeur sous-jacente.
Lorsque le type est String, nous le convertissons en nombre avant d’effectuer la comparaison.
Le résultat de l’exécution de la requête est présenté ci-dessous :
De quelle table proviennent les lignes lors de l’utilisation de merge ?
Comment savoir de quelle table proviennent les lignes ? Nous pouvons utiliser la colonne virtuelle_table à cette fin, comme le montre la requête suivante :
walkover :
walkover est NULL partout, sauf dans atp_matches_1990s.
Nous devrons mettre à jour notre requête pour vérifier si la colonne score contient la chaîne W/O quand la colonne walkover est NULL :
score est Array(String), nous devons parcourir le tableau et y rechercher W/O, tandis que si son type est String, nous pouvons simplement rechercher W/O dans la chaîne.