Vue et indexation Hive : Créer avec des exemples

⚡ Résumé intelligent

Dans Hive, les vues sont des requêtes enregistrées qui se comportent comme des tables en lecture seule, tandis que les index sont des pointeurs vers une colonne qui accélèrent les recherches ; les deux sont créés avec de courtes instructions HiveQL présentées ici.

  • 👁️ Le point de vue est logique : Une vue ne stocke que son instruction SELECT dans le métastore, elle n'occupe donc aucun espace disque propre.
  • (I.e. Lecture seule par conception : Une vue ne peut pas être la cible des opérations LOAD, INSERT ou ALTER, car Hive l'évalue à nouveau à chaque requête.
  • 📍 L'index pointe vers les données : Un index est un pointeur vers une valeur de colonne qui permet à Hive de lire une partie d'un fichier au lieu de la table entière.
  • 🇧🇷 Deux manipulateurs : L'indexation compacte convient aux colonnes à cardinalité élevée et l'indexation bitmap convient aux colonnes comportant peu de valeurs distinctes.
  • (I.e. Reconstruction manuelle : Un index n'est jamais actualisé automatiquement ; la commande ALTER INDEX REBUILD doit donc être exécutée après toute modification de la table de base.
  • 🚫 Supprimé dans Hive 3.0 : L'indexation a été abandonnée dans HIVE-18448 et remplacée par les vues matérialisées, le stockage ORC ou Parquet et le partitionnement.

Vues et index dans Hive expliqués avec des exemples

Qu'est-ce qu'une vue ?

Les vues sont similaires aux tables et sont générées en fonction des besoins. Une vue est un objet purement logique sans stockage propre : Hive ne conserve que le texte de la requête dans le métastore et l’évalue à chaque fois que la vue est consultée.

  • Nous pouvons enregistrer n'importe quelle donnée d'ensemble de résultats sous forme de vue dans Hive
  • L'utilisation est similaire aux vues utilisées dans SQL
  • Une vue est en lecture seule, elle ne peut donc pas être la cible d'une instruction LOAD, INSERT ou ALTER qui écrit des données.

Création de vue :

syntaxe:

Create VIEW <VIEWNAME> AS SELECT

La version complète documentée accepte également une clause IF NOT EXISTS et une liste de colonnes facultative, ce qui est utile lorsque la liste SELECT contient des expressions plutôt que de simples noms de colonnes.

Exemple :

Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000

Dans cet exemple, nous créons la vue Sample_View, qui affiche toutes les valeurs de ligne dont le champ salaire est supérieur à 25 000. Le filtre se trouve à l’intérieur de la vue ; ainsi, toute requête qui sélectionne des données dans Sample_View ne verra que ces lignes.

Qu'est-ce qu'un indice ?

Les index sont des pointeurs vers un nom de colonne spécifique d'une table. Leur objectif est d'améliorer la vitesse de recherche : sans index, une requête avec un prédicat tel que OÙ tab1.col1 = 10 charge la table entière ou la partition et traite chaque ligne, tandis qu'un index sur col1 permet à Hive de ne lire qu'une partie du fichier.

  • L'utilisateur doit définir manuellement l'index
  • Lorsque nous créons un index, cela signifie que nous créons un pointeur vers un nom de colonne particulier de la table.
  • Toute modification apportée à la colonne présente dans le tableau est enregistrée à l'aide de la valeur d'index créée sur le nom de la colonne.

Ce gain de vitesse a un coût. La création de l'index engendre des frais de traitement supplémentaires, et l'index lui-même occupe de l'espace disque qui doit être géré en parallèle de celui de la table.

syntaxe:

Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>

Exemple :

Create INDEX sample_Index ON TABLE guruhive_internaltable(id)

Nous créons ici un index sur la table guruhive_internaltable pour la colonne nommée id. Notez qu'une requête complète sur une version prenant encore en charge l'indexation nécessite également une clause index-handler, comme détaillé dans la section suivante.

Différence entre vue et index dans Hive

Les vues et les index sont souvent présentés ensemble car ils s'appuient tous deux sur une table existante, mais ils résolvent des problèmes différents. Une vue modifie ce qu'une requête voit, tandis qu'un index améliore la rapidité avec laquelle Hive trouve les données. Le tableau ci-dessous les compare.

Aspect Consultation Sommaire
Ce qu'il stocke Seule l'instruction SELECT, dans le métastore Une table d'index distincte contenant des pointeurs vers les données
Interet Simplifiez ou limitez les résultats d'une requête. Réduire la quantité de données analysées pour un prédicat
Coût du disque Aucun Stockage supplémentaire et reconstruction après les modifications de données
Accès en écriture Lecture seule Non interrogée directement ; l’optimiseur l’utilise
Statut actuel : Entièrement pris en charge Supprimé dans Hive 3.0

En pratique, une vue est créée pour faciliter la lecture et contrôler l'accès, tandis qu'un index est créé uniquement pour optimiser les performances sur une colonne spécifique.

Types d'index dans Hive et leur syntaxe

Les versions de Hive jusqu'à la version 2.x incluaient deux gestionnaires d'index, et le gestionnaire était spécifié dans la clause AS obligatoire. L'indexation compacte est apparue dans Hive 0.7.0 et l'indexation bitmap dans Hive 0.8.0.

  • Index compact : Cette méthode stocke la valeur ainsi que l'adresse du bloc HDFS qui la contient, au lieu d'enregistrer l'emplacement de chaque occurrence. Elle convient aux colonnes comportant de nombreuses valeurs distinctes.
  • Index des bitmaps : stocke une image bitmap par valeur distincte, ce qui est l'approche habituelle pour une colonne ne comportant qu'un petit nombre de valeurs distinctes, comme un indicateur de statut ou de genre.

Un index compact est créé, listé et supprimé comme suit :

CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT';
SHOW INDEX ON table01;
DROP INDEX table01_index ON table01;

L'option WITH DEFERRED REBUILD enregistre l'index sans le remplir, ce qui permet de planifier sa reconstruction séparément avec ALTER INDEX. Un index bitmap est créé de la même manière, avec un nom de gestionnaire différent :

CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD;
ALTER INDEX table03_index ON table03 REBUILD;
SHOW FORMATTED INDEX ON table03;
DROP INDEX table03_index ON table03;

Un index n'est pas actualisé automatiquement. À chaque nouvelle donnée reçue par la table de base, la commande ALTER INDEX … REBUILD doit être exécutée. Sur une table partitionnée, la reconstruction peut être limitée à une seule partition.

Pourquoi l'indexation a-t-elle été supprimée dans Hive 3.0 ?

L'indexation a été supprimée de Hive dans la version 3.0 (HIVE-18448). Par conséquent, les commandes CREATE INDEX, SHOW INDEX et DROP INDEX ne sont plus disponibles sur un cluster actuel. Cette fonctionnalité s'avérait rarement rentable après la mise en place du stockage en colonnes et de l'optimiseur basé sur les coûts. Trois alternatives permettent de la remplacer.

  • Vues matérialisées : introduit dans Hive 3.0.0, un vue matérialisée stocke le résultat précalculé d'une requête et l'optimiseur réécrit automatiquement les requêtes entrantes en fonction de ce résultat.
  • Formats de fichiers colonnaires : ORC et Parquet possèdent leurs propres index légers et statistiques min/max, permettant ainsi au lecteur de sauter des bandes, des blocs ou des fichiers entiers sans aucun index défini par l'utilisateur.
  • Cloisons et seaux : partitionnement et compartimentage Éliminer les données au niveau des répertoires et des fichiers permet généralement de supprimer beaucoup plus d'entrées qu'un index.

Sur Hive 2.x, un index reste valide, mais pour les nouveaux travaux, il est préférable d'utiliser l'une des options ci-dessus.

FAQ

La commande DROP VIEW view_name supprime une vue, tandis que la commande ALTER VIEW view_name RENAME TO new_name la renomme. Comme une vue ne contient aucune donnée, il est inutile de la supprimer.ping On ne touche jamais à la table de base ; seule l'entrée du métastore disparaît.

Une vue matérialisée stocke le résultat de la requête précalculé sous forme de données réelles ; elle consomme donc de l’espace disque et nécessite une reconstruction. Une vue classique ne stocke que le texte de la requête et est recalculée à chaque consultation.

Non. Le métastore conserve l'instruction SELECT et la liste des colonnes résolues, rien de plus. Chaque référence réexécute la requête sous-jacente, ce qui explique pourquoi une vue sur une jointure lente reste lente.

Dans Hive 0.12.0 et versions antérieures, les noms d'index étaient sensibles à la casse pour les commandes CREATE INDEX et DROP INDEX, tandis que la commande ALTER INDEX exigeait des minuscules. Hive 0.13.0 a rendu les noms d'index insensibles à la casse pour toutes les instructions.

Oui, sur n'importe quel cluster moderne. L'élagage des partitions supprime des répertoires entiers avant le début de l'analyse, et le découpage en compartiments restreint une jointure ou un échantillon à des fichiers spécifiques, ce qui est généralement plus performant qu'une table d'index.

Les outils d'apprentissage automatique analysent les journaux de requêtes, classent les colonnes de prédicats par sélectivité et fréquence, et suggèrent les cas où une vue matérialisée ou un schéma de partitionnement serait avantageux. Validez chaque suggestion par rapport à un plan d'exécution EXPLAIN avant de l'appliquer.

Il génère des instructions CREATE VIEW de manière fiable à partir d'un court commentaire. Vérifiez les spécificités de chaque version, car il produit encore une syntaxe CREATE INDEX qu'un cluster Hive 3.0 ou ultérieur rejette catégoriquement.

L'index est une table distincte de pointeurs, et Hive ne le met jamais à jour lorsque la table de base est modifiée. Sans reconstruction, les pointeurs deviennent obsolètes, et l'optimiseur ignore alors l'index ou renvoie des correspondances périmées.

Résumez cet article avec :