Introduction à l’utilisation du Framework Apache Hive
Introduction à l’utilisation du Framework Apache Hive
Tables Apache Hive 3
En utilisant Hive, vous pouvez créer des tables gérées ou des tables externes.
Dans Hive 3, Hive contrôle totalement les tables gérées. Vous ne pouvez accéder et modifier les données des tables gérées que par Hive. Les tables gérées, à l'exception des tables temporaires, sont des tables transactionnelles ayant des propriétés ACID (atomicité, cohérence, isolation et durabilité). Parce que Hive a le contrôle total des tables gérées, Hive peut optimiser ces tables de manière approfondie. Si vous devez contourner Hive pour accéder aux données directement sur le système de fichiers, utilisez des tables externes ou un gestionnaire de stockage, tel que Druid ou HBase.
La matrice suivante répertorie les types de tables que vous pouvez créer à l'aide de Hive, que les propriétés ACID soient ou non prises en charge, le format de stockage requis et les opérations SQL clés.
Bien que vous ne puissiez pas utiliser les instructions SQL UPDATE ou DELETE pour supprimer des données dans certains types de tables, vous pouvez utiliser DROP PARTITION sur n’importe quel type de table pour supprimer les données.
Le type de stockage de la table gérée est ORC (Optimized Row Column) par défaut. Si vous acceptez la valeur par défaut en ne spécifiant aucun stockage lors de la création de la table ou si vous spécifiez un stockage ORC, le résultat est une table ACID avec des fonctionnalités d'insertion, de mise à jour et de suppression (CRUD). Si vous spécifiez un autre type de stockage, tel que texte, CSV, AVRO ou JSON, le résultat est une table ACID avec insertion uniquement. Vous ne pouvez pas mettre à jour ou supprimer des colonnes dans la table.
Le tableau suivant et les sections suivantes couvrent d'autres différences entre les tables gérées (transactionnelles) et les tables externes:
…
Tables transactionnelles
Les tables transactionnelles (ACID) résident dans l'entrepôt Hive. Pour atteindre la conformité ACID, Hive doit gérer la table, y compris l'accès aux données de la table. Les données des tables CRUD (création, récupération, mise à jour et suppression) doivent être au format de fichier ORC. Les tableaux comportant uniquement des insertions prennent en charge tous les formats de fichier. Hive est conçu pour prendre en charge un taux de transactions relativement faible, par opposition à un système de traitement analytique en ligne (OLAP). Vous pouvez utiliser le spectacle
Commande TRANSACTIONS pour répertorier les transactions ouvertes et abandonnées.
Les tables transactionnelles dans Hive 3 sont sur un pied d'égalité avec les tables non-ACID. Aucun compartiment ni tri n'est requis dans les tables transactionnelles de Hive 3. Ces tables sont compatibles avec le stockage en nuage natif.
Hive prend en charge une instruction par transaction, qui peut inclure un nombre quelconque de lignes, de partitions ou de tables.
Tables externes
Les données de la table externe ne sont ni possédées ni contrôlées par Hive. Vous utilisez généralement une table externe lorsque vous souhaitez accéder aux données directement au niveau du fichier, à l'aide d'un outil autre que Hive. Hive 3 ne prend pas en charge les fonctionnalités suivantes pour les tables externes: cache ery
- Vues matérialisées, sauf de manière limitée
- Collecte de statistiques par défaut
- Calculer des requêtes en utilisant des statistiques
- filtrage automatique de l'exécution
- Fusion de fichiers après insertion
Lorsque vous exécutez DROP TABLE sur une table externe, Hive supprime par défaut uniquement les métadonnées (schéma). Si vous souhaitez que la commande DROP TABLE supprime également les données réelles de la table externe, comme le fait DROP TABLE sur une table gérée, vous devez définir la propriété external.table.purge sur true, comme décrit ultérieurement.
Emplacement des tables dans HDP 3.x
Les tables gérées résident dans l'espace de table géré, auquel seul Hive peut accéder. Par défaut, Hive suppose que les tables externes résident dans l’espace de table externe. Les espaces de table de l'entrepôt sont affichés dans la vue Fichiers d'Ambari:
Pour déterminer le type de table gérée ou externe, vous pouvez exécuter la commande DESCRIBE EXTENDED nom_table.
Limites et prérequis de la ruche
Hive n'est pas conçu pour remplacer des systèmes tels que MySQL ou HBase. Si vous mettez à niveau une version antérieure vers Hive 3, vous devez exécuter un compactage important pour utiliser vos tables transactionnelles.
Créer une table transactionnelle CRUD
Vous créez une table transactionnelle CRUD lorsque vous avez besoin d'une table gérée que vous pouvez mettre à jour, supprimer et fusionner.
A propos de cette tâche
Dans cette tâche, vous créez une table transactionnelle CRUD sur la ligne de commande. Vous ne pouvez pas trier ce type de table.
Le Bucketing est facultatif dans Hive 3 et n'affecte pas les performances. Par défaut, les données de table sont stockées au format de fichier ORC (Optimized Row Columnar). Implémenter un gestionnaire de stockage prenant en charge AcidInputFormat et AcidOutputFormat équivaut à spécifier un stockage ORC.
Procédure
- Lancez Beeline pour lancer Hive.
ligne -u jdbc: hive2: //myhiveserver.com: 10000 -n hive -p
- Entrez votre nom d'utilisateur et votre mot de passe.
Le message de connexion Hive 3, suivi de l'invite Hive pour la saisie de requêtes HiveQL sur la ligne de commande, apparaît.
- Créez une table transactionnelle CRUD nommée T ayant deux colonnes entières, a et b:
CREATE TABLE T (a int, b int);
Créer une table transactionnelle avec insertion seulement
Vous pouvez créer une table transactionnelle en utilisant n'importe quel format de stockage si vous n'avez pas besoin des fonctions de mise à jour et de suppression.
A propos de cette tâche
Dans cette tâche, vous créez une table transactionnelle comportant uniquement des insertions pour stocker du texte.
Procédure
- Démarrez le shell Hive:
[vagrant @ c7401] # ruche
- Entrez votre nom d'utilisateur et votre mot de passe.
Le message de connexion Hive 3 apparaît, suivi de l'invite Hive pour la saisie de requêtes sur la ligne de commande.
- Créez une table transactionnelle comportant uniquement deux insertions, nommée T2, comportant deux colonnes entières, a et b:
CRÉER LA TABLE T2 (a int, b int)
TBLPROPERTIES ('transactional_properties' = 'insert_only');
Créer, utiliser et supprimer une table externe
Vous utilisez une table externe, qui n'est pas gérée par Hive, pour importer des données d'un fichier sous HDFS ou d'un autre système de fichiers dans Hive.
Avant que tu commences
Dans cette tâche, vous devez accéder à HDFS pour placer un fichier CSV (valeurs séparées par des virgules) sur HDFS. Si vous n'utilisez pas Ranger et qu'aucune ACL permettant d'accéder à HDFS n'est en place, vous devez vous connecter à un nœud de votre cluster en tant qu'utilisateur hdfs. Lorsque vous utilisez Ranger, vous devez également être autorisé par une stratégie, telle que la stratégie par défaut du chemin complet HDFS (illustrée ci-dessous) pour accéder à HDFS.
A propos de cette tâche
Dans cette tâche, vous créez une table externe, stockez les données dans Hive à l'aide d'une table gérée et supprimez la table externe.
Vous créez une table externe et chargez les données d'un fichier dans la table. Vous utilisez ensuite une table gérée Hive pour stocker les données dans Hive. Cette tâche illustre les principes Hive suivants:
- Une différence majeure entre une table externe et une table gérée (interne): la persistance des données de la table sur le système de fichiers après une instruction DROP TABLE.
- Suppression de table externe: Hive supprime uniquement les métadonnées, qui consistent principalement en la définition de schéma.
- Suppression de table gérée: Hive supprime les données et les métadonnées stockées dans l'entrepôt Hive.
- Vous pouvez rendre les données de la table externe disponibles après l'avoir supprimée en émettant une autre instruction CREATE EXTERNAL TABLE pour charger les données à partir du système de fichiers.
- La clause LOCATION de CREATE TABLE spécifie l'emplacement des données de la table externe.
Procédure
- Créez un fichier texte nommé students.csv contenant les lignes suivantes.
1, jane, biche, senior, mathématiques
2, john, smith, junior, ingénierie
- En tant que root, déplacez le fichier vers
/ home / hdfs
sur un nœud de votre cluster. En tant que fichiers hdfs, créez un répertoire sur HDFS dans le répertoire utilisateur appelé andrena, qui permet l’accès à tous, puis placez students.csv dans le répertoire.
- Sur la ligne de commande d'un nœud de votre cluster, entrez les commandes suivantes:
sudo su mv
étudiants.csv / home / hdfs
sudo su - hdfs
hdfs dfs -mkdir / user / andrena
hdfs dfs -chmod 777 / utilisateur / andrena
hdfs dfs -put /home/hdfs/students.csv / user / andrena
hdfs dfs -chmod 777 /user/andrena/students.csv
- Si vous avez l'autorisation d'utiliser HDFS via une stratégie Ranger, utilisez la ligne de commande ou Ambari pour créer le répertoire et placez le fichier students.csv dans le répertoire.
- Démarrez le shell Hive.
Par exemple, remplacez l’URI de votre serveur de stockage: beeline -u jdbc: hive2: //myhiveserver.com: 10000 -n hive -p
- Créez une définition de schéma de table externe qui spécifie le format du texte, charge les données du fichier students.csv situé dans
/ utilisateur / andrena.
CREATE EXTERNAL TABLE SI PAS EXISTS name_text (ID_étudiant INT, Prénom CHAINE, Nom CHAÎNE, Année CHAÎNE, Chaîne majeure)
COMMENTAIRE 'Noms d'étudiant'
ROW FORMAT DELIMITED
ZONES TERMINÉES PAR ','
Stocké en tant que fichier texte
LOCATION '/ user / andrena';
Vérifiez que l’entrepôt Hive stocke les noms des étudiants dans la table externe.
SELECT * FROM names_text;
- Créez le schéma pour une table gérée.
CREATE TABLE SI PAS EXISTS Noms (
student_ID INT, Prénom STRING, Nom Last STRING, année STRING, Major STRING)
COMMENT 'Noms d'étudiants';
- Déplacez les données de la table externe vers la table gérée.
INSERT OVERWRITE TABLE Noms SELECT * FROM names_text;
- Vérifiez que les données de la table externe résident dans la table gérée, supprimez la table externe et vérifiez que les données résident toujours dans la table gérée.
SELECT * parmi les noms;
DROP TABLE names_text;
SELECT * parmi les noms;
Les résultats de la table gérée Noms apparaissent.
- Vérifiez que la définition du schéma de la table externe est perdue.
SELECT * from names_text;
La sélection de tous dans names_text ne renvoie aucun résultat, car le schéma de la table externe est perdu. Le fichier students.csv sur HDFS contenant les noms des étudiants reste intact.
Déposer une table externe avec des données
Lorsque vous exécutez DROP TABLE sur une table externe, Hive supprime par défaut uniquement les métadonnées (schéma). Si vous souhaitez que la commande DROP TABLE supprime également les données réelles de la table externe, comme le fait DROP TABLE sur une table gérée, vous devez configurer les propriétés de la table en conséquence.
Procédure
- Créez un fichier CSV contenant les données que vous souhaitez interroger dans Hive.
- Lancez Beeline pour lancer Hive.
Par exemple: beeline -u jdbc: hive2: //myhiveserver.com: 10000 -n hive -p
- Créez une table externe pour stocker les données CSV et configurez-la afin de pouvoir la supprimer avec les données.
CREATE EXTERNAL TABLE SI PAS EXISTS names_text (a INT, b STRING)
ROW FORMAT DELIMITED
ZONES TERMINÉES PAR ','
Stocké en tant que fichier texte
LOCATION '/ user / andrena'
TBLPROPERTIES ('external.table.purge' = 'true');
- Exécutez DROP TABLE sur la table externe.
DROP TABLE names_text;
La table est supprimée de Hive Metastore et les données stockées en externe. Par exemple, names_text est supprimé de Hive Metastore et le fichier CSV qui stockait les données est également supprimé de HDFS.
- Évitez que les données de la table externe ne soient supprimées par une instruction DROP TABLE.
ALTER TABLE address_text SET TBLPROPERTIES ('external.table.purge' = 'false');
Utiliser des contraintes
Vous pouvez utiliser les contraintes DEFAULT, PRIMARY KEY, FOREIGN KEY et NOT NULL dans les définitions de table Hive ACID pour améliorer les performances, la précision et la fiabilité des données.
Le moteur Hive et les outils de BI peuvent simplifier les requêtes si les données sont prévisibles et faciles à localiser. Hive applique les contraintes comme suit:
DÉFAUT
Assure qu'une valeur existe, ce qui est utile dans les cas de déchargement EDW.
PRIMARY KEY Identifie chaque ligne d'un tableau à l'aide d'un identifiant unique.
FOREIGN KEY Identifie une ligne dans une autre table à l'aide d'un identifiant unique.
PAS NULL
Vérifie qu'une valeur de colonne n'est pas définie sur NULL.
L'optimiseur utilise les informations pour prendre des décisions intelligentes. Par exemple, si le moteur sait qu'une valeur est une clé primaire, il ne recherche pas de doublons. Les exemples suivants montrent l'utilisation de contraintes:
CREATE TABLE Personnes (
ID INT NON NULL,
Nom STRING NOT NULL,
Age INT,
Créateur STRING DEFAULT CURRENT_USER (),
CreateDate DATE DEFAULT CURRENT_DATE (),
PRIMARY KEY (ID) DISABLE NOVALIDATE);
CREATE TABLE BusinessUnit (
ID INT NON NULL,
Tête INT NON NUL,
Créateur STRING DEFAULT CURRENT_USER (),
CreateDate DATE DEFAULT CURRENT_DATE (),
PRIMARY KEY (ID) DISABLE NOVALIDATE,
CONTRAINTE fk CLÉ ÉTRANGÈRE (responsable) RÉFÉRENCES Personnes (ID) DÉSACTIVÉ
NOVALIDATE
) ;
Déterminer le type de table
Vous pouvez déterminer le type d'une table Hive, si elle possède des propriétés ACID, le format de stockage, tel que ORC, et d'autres informations. Connaître le type de table est important pour un certain nombre de raisons, telles que la compréhension du stockage des données dans la table ou la suppression complète des données du cluster.
Procédure
- Dans le shell Hive, obtenez une description détaillée de la table.
Par exemple: DESCRIBE EXTENDED mydatabase.mytable;
- Faites défiler jusqu'au bas de la sortie de la commande pour voir le type de table.
La sortie suivante indique que le type de table est géré et transaction = true indique que la table a des propriétés ACID:
...
| Informations détaillées sur le tableau | Table (tableName: t2, dbName: mydatabase,
owner: hdfs, createTime: 1538152187, lastAccessTime: 0, rétention: 0,
sd: StorageDescriptor (cols: [FieldSchema (nom: a, type: int, commentaire: null),
Schéma de champ (nom: b, type: int, commentaire: null)], ...
Modification des tables de plat à transactionnel
Savoir comment Hive convertit les tables de plat en transaction, et connaître les opérations prises en charge par la conversion, vous aide à faire la transition de tables préexistantes vers Hive 3.
Si vous avez créé une version antérieure à HDP 3.0 (une table gérée, non transactionnelle), vous pouvez convertir la table en transaction à l'aide d'une instruction ALTER TABLE. Hive ne modifie que les métadonnées, cette opération est donc très rapide. Le compactage finit par réécrire la table pour la convertir au format ACID, mais il se produit en arrière-plan. Vous pouvez donc exécuter les opérations de mise à jour et de suppression de la table immédiatement après l'avoir modifiée.
Il existe une parité étendue entre les tables simples et transactionnelles, comme indiqué dans la liste suivante des fonctionnalités prises en charge dans les tables transactionnelles:
- Ajouter une partition ...
- Modifier la table
- modifier la table T concaténer
- Modifier le tableau T renommer en ...
- Créer une table en tant que ...
- Tableau d'exportation / importation
- entièrement vectorisé
- Insérer écrasement
- Dans la table ...
- Cache LLAP
- Charger des données ...
- tables non seau
- prédicat enfoncé
Modifier une table de plat à transactionnel
Vous pouvez avoir une table à plat, qui est une table non transactionnelle dans l'entrepôt Hive, présente à partir des versions précédentes.
Vous pouvez utiliser une instruction ALTER TABLE pour modifier une table de plate en transaction.
A propos de cette tâche
Une fois la tâche terminée, vous pouvez exécuter immédiatement les opérations de mise à jour et de suppression de la table.
Procédure
- Démarrez le shell Hive:
À partir de la ligne de commande: ruche
- Entrez votre nom d'utilisateur et votre mot de passe.
Le message de connexion Hive 3 apparaît, suivi de l'invite Hive pour la saisie de requêtes HiveQL sur la ligne de commande:
Connecté à: Apache Hive (version 3.0.0.3.0.0.0-1361)
Pilote: Hive JDBC (version 3.0.0.3.0.0.0-1361)
Isolation de transaction: TRANSACTION_REPEATABLE_READ
Beeline version 3.0.0.3.0.0.0-1361 d'Apache Hive