Types de données Hive : comment créer et supprimer des bases de données dans Hive

⚡ Résumé intelligent

Les types de données Hive définissent ce que chaque colonne de table peut contenir, et les commandes CREATE DATABASE et DROP DATABASE configurent ou suppriment l'espace de noms dans lequel ces tables résident à l'intérieur du métastore Hive.

  • (I.e. Types numériques : TINYINT à BIGINT couvrent les nombres entiers, tandis que DECIMAL (précision, échelle) conserve les valeurs exactes que FLOAT et DOUBLE ne peuvent pas.
  • 🔤 Types de chaînes de caractères : STRING n'a pas de limite déclarée, VARCHAR accepte de 1 à 65535 caractères et CHAR est limité à 255 caractères.
  • 📅 Date et heure: La fonction DATE stocke une valeur simple au format AAAA-MM-JJ, tandis que la fonction TIMESTAMP ajoute une précision optionnelle à la nanoseconde.
  • 🧩 Types complexes : Les types ARRAY, MAP, STRUCT et UNIONTYPE regroupent plusieurs valeurs liées dans une seule colonne au lieu de plusieurs.
  • ???? Créer une base de données : La commande CREATE DATABASE enregistre un espace de noms dans le métastore, et la commande SHOW DATABASES confirme son existence.
  • 🇧🇷 Déposer une base de données : DROP DATABASE supprime l'espace de noms, et CASCADE est nécessaire lorsque des tables s'y trouvent encore.

Types de données Hive et comment créer et supprimer des bases de données dans Hive

Les types de données sont des éléments essentiels du langage de requêtes Hive et de la modélisation des données. Pour définir les types de colonnes d'une table, il est indispensable de connaître les types de données et leur utilisation.

Ce qui suit donne un bref aperçu de certains types de données présents dans Hive :

  • Types numériques
  • Types de chaîne
  • Types de date/heure
  • Types complexes

Types de données dans Hive

Chaque colonne Hive est déclarée avec l'un des types ci-dessous. Les types primitifs apparaissent en premier, suivis des types complexes qui peuvent contenir plusieurs valeurs dans une même colonne.

Types de données numériques Hive

Les colonnes numériques peuvent contenir de un à huit octets ; choisir le type le plus petit compatible avec les valeurs permet donc de réduire les coûts de stockage et d’analyse.

Type Allocation de mémoire
PETIT INT Entier signé de 1 octets (-128 127 à )
INTEMPLE Entier signé de 2 octets (-32,768 32,767 à )
INT Entier signé de 4 octets (-2,147,483,648 2,147,483,647 à )
GRAND Entier signé de 8 octets (-9,223,372,036,854,775,808 9,223,372,036,854,775,807 à )
FLOAT Nombre à virgule flottante simple précision sur 4 octets
DOUBLE nombre à virgule flottante double précision de 8 octets
DÉCIMAL On peut définir la précision et l'échelle dans ce type, sous la forme DECIMAL(précision, échelle). Si elles sont omises, Hive utilise DECIMAL(10,0).

Types de données de chaîne Hive

Les colonnes de caractères se présentent sous trois formes, et la différence réside dans le fait que Hive impose ou non une longueur déclarée.

Type longueur du câble
CARBONISER Longueur fixe, jusqu'à 255 caractères. Les valeurs plus courtes sont complétées par des espaces.
VARCHAR De 1 à 65 535 caractères. Une valeur plus longue est tronquée sans avertissement.
STRING Nous pouvons définir la longueur ici (sans limite).

Types de données date/heure de la ruche

Les colonnes temporelles sont stockées sans décalage horaire, un point à garder à l'esprit avant de comparer des valeurs écrites par différents clusters.

Type Utilisation
Horodatage Prend en charge le traditionnel Unix horodatage avec précision à la nanoseconde en option
Date Il est au format AAAA-MM-JJ.
La plage de valeurs prises en charge pour le type Date est de 0000-01-01 à 9999-12-31, selon la prise en charge par la primitive Java Type de date

Types de données divers de Hive

Deux autres primitives se situent en dehors des familles numériques, de chaînes de caractères et de dates, mais apparaissent régulièrement dans des schémas réels.

Type Utilisation
Booléen Stocke vrai ou faux
BINARY Stocke un tableau d'octets, ce qui empêche le contenu brut d'être stocké dans une colonne STRING.

Types de données complexes Hive

Les types complexes imbriquent les valeurs dans une seule colonne, ce qui élimine la jointure supplémentaire nécessaire à une conception relationnelle.

Type Utilisation
Arrays TABLEAU
Les valeurs négatives et les expressions non constantes ne sont pas autorisées
Map CARTE
Les valeurs négatives et les expressions non constantes ne sont pas autorisées
Structures STRUCT
syndicat UNIONTYPE

Exemple de types de données complexes Hive

Le tableau ci-dessus présente la forme de déclaration. L'instruction ci-dessous regroupe trois types complexes dans un seul tableau afin de visualiser simultanément les clauses de délimitation et la syntaxe d'accès.

CREATE TABLE employees (
  name      STRING,
  skills    ARRAY<STRING>,
  deductions MAP<STRING, FLOAT>,
  address   STRUCT<street:STRING, city:STRING, pin:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

Trois délimiteurs distincts sont nécessaires : un entre les colonnes, un deuxième entre les éléments d’un tableau ou d’une structure, et un troisième entre la clé et la valeur d’une carte. Une fois la table créée, chaque colonne complexe est lue à l’aide de son propre accesseur.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

Le tableau ci-dessous récapitule quel accesseur appartient à quel type.

Type Comment une valeur est lue
TABLEAU Index à base zéro, tel que compétences[0]
CARTE Recherche par clé entre crochets, par exemple déductions['tax']
STRUCTURE Notation pointée sur le nom du champ, par exemple adresse.ville
UNIONTYPE Rarement utilisé, car la prise en charge des requêtes est restée incomplète.

Les types complexes peuvent être imbriqués, donc ARRAY > est une déclaration de colonne valide. Une fois la structure des colonnes définie, les tables sont construites à l'aide des instructions décrites dans Tables Hive : création, modification et suppression.

Comment créer et supprimer des bases de données dans Hive

Dans Hive, une base de données est simplement un espace de noms qui regroupe des tables ; c’est donc le premier objet à créer avant toute manipulation de tables. Voici les étapes à suivre pour créer et supprimer des bases de données dans Hive.

Étape 1) Créer une base de données dans Hive

Pour créer une base de données dans Hive Shell, nous devons utiliser la commande dont la syntaxe est indiquée ci-dessous :

syntaxe:

Create database <DatabaseName>

Exemple : Créer la base de données « guru99 »

La capture d'écran ci-dessous montre l'instruction de création suivie d'une commande d'affichage listant toutes les bases de données du cluster.

Création de la base de données guru99 via Hive Shell et affichage des bases de données avec la commande show

D'après la capture d'écran ci-dessus, nous faisons deux choses :

  1. Création de la base de données « guru99 » dans Hive
  2. Affichage des bases de données existantes à l'aide de la commande « show »

Sur le même écran, la base de données « guru99 » s'affiche à la fin lorsque nous exécutons la commande show, ce qui signifie que la base de données « guru99 » a été créée avec succès.

Étape 2) Déposer la base de données dans Hive

Pour la chuteping Dans l'interface Hive, pour supprimer une base de données, il faut utiliser la commande « drop » comme indiqué dans la syntaxe ci-dessous :

syntaxe:

Drop database <DatabaseName>

Exemple : Supprimer la base de données guru99

Dans la capture d'écran suivante, l'instruction DROP s'exécute en premier, et la commande SHOW qui suit n'affiche plus la base de données.

Chute de coquille de rucheping la base de données guru99 et la confirmation de la suppression avec show

Dans la capture d'écran ci-dessus, nous faisons deux choses :

  1. Nous sommes en train de lâcherping base de données 'guru99' de Hive
  2. Vérification croisée avec la commande « show »

Sur le même écran, après avoir vérifié les bases de données avec la commande show, la base de données « guru99 » n'apparaît pas dans Hive. Nous pouvons donc confirmer que la base de données « guru99 » a été supprimée.

Commandes de la base de données Hive : USE, DESCRIBE, SHOW et ALTER DATABASE

Les deux instructions ci-dessus utilisent leur forme la plus courte. La syntaxe documentée comporte des clauses optionnelles qui déterminent l'emplacement des fichiers et le comportement du système lorsque le nom est déjà utilisé.

CREATE DATABASE [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

Les mots clés DATABASE et SCHEMA sont interchangeables ; CREATE SCHEMA et CREATE DATABASE font donc exactement la même chose. Les autres commandes permettent de gérer les opérations courantes avec un espace de noms.

Command Ce qu'il fait
AFFICHER LES BASES DE DONNÉES; Liste toutes les bases de données enregistrées dans le métastore
USE nom_base de données ; Définit la base de données actuelle afin que les noms de tables n'aient pas besoin de préfixe.
DÉCRIRE LA BASE DE DONNÉES nom_base_de_données; Signale le commentaire, l'emplacement HDFS et le propriétaire
DÉCRIRE LA BASE DE DONNÉES ÉTENDU nom_de_la_base_de_données ; Ajoute les paires clé-valeur DBPROPERTIES à cette sortie
ALTER DATABASE nom_de_la_base_de_données SET DBPROPERTIES (…) ; Ajoute ou remplace des propriétés de métadonnées
ALTER DATABASE nom_de_la_base_de_données DÉFINIR PROPRIÉTAIRE UTILISATEUR nom_d'utilisateur; Transfère la propriété à un autre utilisateur ou rôle
ALTER DATABASE nom_base_de_données SET LOCATION chemin_hdfs; Modifie le chemin d'accès utilisé par les tables créées à partir de ce moment-là.

Deux valeurs par défaut sont à retenir. Sans clause LOCATION, les fichiers sont placés dans le répertoire de l'entrepôt de données, généralement /user/hive/warehouse/database_name.db. Sans IF EXISTS, une suppression d'un fichier portant sur un nom introuvable génère une erreur au lieu de se dérouler sans incident. Ces deux paramètres sont stockés dans le fichier de configuration. Métastore Hive.

Conversion des types de données Hive et erreurs courantes

Les types ne sont pas toujours utilisés exactement comme déclarés. Hive élargit automatiquement une valeur lorsqu'aucune information ne risque d'être perdue, et laisse toutes les autres situations à une conversion explicite.

  • L'élargissement implicite suit la chaîne TINYINT à SMALLINT à INT à BIGINT à FLOAT à DOUBLE, et une STRING contenant des chiffres est promue en DOUBLE.
  • Le rétrécissement ne se fait jamais automatiquement, donc une valeur DOUBLE affectée à une colonne INT nécessite une conversion écrite.
  • La fonction CAST effectue cette conversion écrite et renvoie NULL plutôt qu'une erreur lorsque la valeur ne peut pas être convertie.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Les erreurs ci-dessous expliquent la plupart des surprises que rencontrent les débutants lors de leur premier schéma.

Symptôme Cause et solution
La suppression échoue alors que la base de données contient encore des tables. RESTRICT est la valeur par défaut. Ajoutez CASCADE pour supprimer les tables concernées.
Une longue ficelle arrive raccourcie VARCHAR tronque silencieusement les données au-delà de sa longueur déclarée. Utilisez STRING lorsqu'aucune limite n'est souhaitée.
Une colonne affiche la valeur NULL après une conversion CAST n'a pas pu analyser la valeur. Vérifiez les données sources avant d'élargir le type.
La valeur des devises perd de son paise ou de ses centimes DECIMAL sans arguments signifie DECIMAL(10,0). Indiquez explicitement l'échelle.
Deux dates d'apparence identique ne correspondent jamais Une colonne de type STRING et une colonne de type DATE sont de types différents. Il convient de convertir l'un des deux types avant de les comparer.

Une fois que les types de données se comportent correctement, l'étape suivante consiste à charger et à interroger les données elles-mêmes, ce qui est traité dans Requêtes Hive avec Order By, Group By et Cluster By.

FAQ

Non. En HiveQL, DATABASE et SCHEMA sont des mots-clés interchangeables ; ainsi, CREATE SCHEMA sales et CREATE DATABASE sales produisent le même objet metastore. Le choix relève simplement d'une question de convention interne.

Dans le répertoire de l'entrepôt de données, généralement /user/hive/warehouse/database_name.db sur HDFS, une clause LOCATION dans CREATE DATABASE remplace ce chemin, et DESCRIBE DATABASE indique l'emplacement réellement utilisé.

Le type STRING est généralement privilégié car il n'impose aucune limite de longueur et ne nécessite aucun remplissage. VARCHAR est utile lorsqu'une longueur minimale est requise, et CHAR convient aux codes courts à largeur fixe, tels que les abréviations de pays.

Le type DOUBLE étant un nombre à virgule flottante binaire, les sommes répétées peuvent varier de quelques fractions de centime. Le type DECIMAL stocke des valeurs exactes avec une précision et une échelle définies, ce qui garantit la reproductibilité des totaux financiers d'une exécution à l'autre.

Un TIMESTAMP simple est indépendant du fuseau horaire et est lu tel quel. Hive 3.1 a introduit TIMESTAMP WITH LOCAL TIME ZONE, qui normalise la valeur en UTC lors de l'écriture et la convertit lors de la lecture.

Oui. Une structure (STRUCT) peut être contenue dans un tableau (ARRAY) et une valeur d'une map (MAP) peut elle-même être une structure (STRUCT), donc un tableau (ARRAY) > est valide dans RucheUn niveau d'imbrication trop important complique la délimitation, il faut donc le maintenir peu profond.

Oui. Les outils de profilage des données analysent la cardinalité, les taux de valeurs nulles et les plages de valeurs, puis suggèrent le type le plus adapté et un format de fichier. Considérez cette suggestion comme une ébauche, car le modèle ne peut pas anticiper les charges de travail futures.

Copilot génère les instructions CREATE TABLE et CREATE DATABASE à partir d'un court commentaire, et les assistants agents peuvent convertir un fichier d'exemple en schéma. Vérifiez toujours l'échelle DECIMAL et les clauses de délimitation avant d'exécuter le résultat.

Résumez cet article avec :