Vidéo: SQL Inner Join Multiple Tables with SUM Tutorial - SQL 2008/2012/2016/2017 2024
Vous savez probablement déjà que les experts en modélisation et conception de bases de données relationnelles passent beaucoup de temps à concevoir des bases de données normalisées, . La base de données normalisation est une technique qui protège contre la perte de données, la redondance et d'autres anomalies au fur et à mesure que les données sont mises à jour et récupérées. Les experts suivent un certain nombre de règles pour arriver à une base de données normalisée, mais la règle 1 est que vous devez vous retrouver avec un
groupe de tables. (Une grande table stockant toutes vos données n'est pas normale - jeu de mots.) Il existe des exceptions, selon le cas d'utilisation, mais la loi de nombreuses tables est généralement suivie de près, en particulier pour les bases de données. par exemple).
Qu'est-ce que tout cela a à voir avec les jointures dans Hive? Eh bien, rappelez-vous que le système d'exploitation sous-jacent pour Hive est (surprise!) Apache Hadoop: MapReduce est le moteur pour joindre les tables, et le système de fichiers Hadoop (HDFS) est le stockage sous-jacent. C'est une bonne nouvelle pour l'utilisateur qui veut créer, gérer et analyser de grandes tables avec Hive.
Rappelez-vous que MapReduce et HDFS sont optimisés pour le débit avec l'analyse Big Data et que, dans ce monde, latences - les temps de réponse des utilisateurs, en d'autres termes - sont généralement élevés. Hive est conçu pour le traitement analytique par lots, et non pour le traitement rapide des transactions en ligne. Les utilisateurs qui veulent les meilleures performances possibles avec SQL sur Apache Hadoop ont des solutions disponibles.
Comme la table Hive lit et écrit via HDFS implique généralement de très gros blocs de données, plus vous pouvez gérer de données dans une table, meilleures sont les performances globales.
L'accès au disque et au réseau est beaucoup plus lent que l'accès à la mémoire. Minimisez donc les lectures et les écritures HDFS autant que possible.
Avec ces informations de base à l'esprit, vous pouvez vous attaquer à la création de jointures avec Hive. Heureusement, la communauté de développement de Hive était réaliste et comprenait que les utilisateurs voudraient et devraient joindre des tables avec HiveQL. Cette connaissance devient particulièrement importante avec l'augmentation EDW. Les cas d'utilisation tels que les archives "queryable" nécessitent souvent des jointures pour l'analyse des données.
Voici un exemple de jointure Hive utilisant des tables de données de vol. La liste vous montre comment créer et afficher une table myflightinfo2007 et une table myflightinfo2008 à partir des plus grandes tables FlightInfo2007 et FlightInfo2008. Le plan a toujours été d'utiliser les tables myflightinfo2007 et myflightinfo2008 créées par le CTAS pour illustrer comment vous pouvez effectuer des jointures dans Hive.
La figure montre le résultat d'une jointure interne avec les tables myflightinfo2007 et myflightinfo2008 à l'aide du client SQL SQuirreL.
Hive prend en charge
equi-jointures, un type spécifique de jointure qui utilise uniquement des comparaisons d'égalité dans le prédicat de jointure. (ON m8 FlightNum = m7 FlightNum est un exemple d'équi-jointure.) Les autres comparateurs tels que Less Than (<) ne sont pas supportés. Cette restriction est uniquement due à des limitations sur le moteur MapReduce sous-jacent. En outre, vous ne pouvez pas utiliser OR dans la clause ON. La figure illustre l'exemple précédent de la jointure interne et de deux autres types de jointure Hive. Notez que vous pouvez confirmer les résultats d'une jointure interne en examinant le contenu des tables myflight2007 et myflight2008.
La figure suivante illustre le fonctionnement d'une jointure interne à l'aide d'un diagramme de Venn, au cas où vous ne maîtriseriez pas la technique. L'idée de base ici est qu'une jointure interne renvoie les enregistrements qui correspondent entre deux tables. Donc une jointure interne est un outil d'analyse parfait pour déterminer quels vols sont les mêmes de JFK (New York) à ORD (Chicago) en juillet 2007 et juillet 2008.
Optimiser les jointures de Hive est un sujet brûlant dans la communauté Hive. Pour plus d'informations sur les techniques d'optimisation actuelles, consultez la page Join Optimization sur le wiki Hive.