Types de données fondamentaux
Apache Hive propose une variété de types de données calqués sur les types Java pour assurer une compatibilité optimale lors du traitement de gros volumes de données.
1. Types numériques
| Type | Plage (Octets) | Équivalent Java | Suffixe |
|---|---|---|---|
| TINYINT | 1 octet | byte | Y |
| SMALLINT | 2 octets | short | S |
| INT | 4 octets | int | - |
| BIGINT | 8 octets | long | L |
| FLOAT / DOUBLE | 4 / 8 octets | float / double | - |
| DECIMAL | Variable | BigDecimal | - |
2. Chaînes de caractères
Hive supporte trois formats principaux pour le texte :
- STRING : Longueur variable, jusqu'à 2 Go.
- VARCHAR : Longueur limitée (entre 1 et 65355). Idéal pour optimiser le stockage.
- CHAR : Longueur fixe (max 255). Si la donnée est plus courte, elle est complétée par des espaces.
3. Manipulation temporelle
Le formatage des dates et timestamps est essentiel pour le partitionnement temporel.
-- Récupérer le timestamp actuel
SELECT unix_timestamp();
-- Convertir une date textuelle en timestamp UNIX
SELECT unix_timestamp('2023-10-27 14:30:00');
-- Formater un timestamp UNIX en texte lisible
SELECT from_unixtime(1698417000, 'yyyy/MM/dd HH:mm');
-- Conversion explicite de types
SELECT cast('2023-10-27' AS DATE);
Structures de données complexes
Contrairement au SQL traditionnel, Hive gère nativement les structures imbriquées :
- MAP : Collection de paires clé-valeur (ex:
map<string, int>). - ARRAY : Liste d'éléments de même type (ex:
array<string>). - STRUCT : Ensemble de champs nommés de types différents.
- UNIONTYPE : Permet de stocker plusieurs types dans un seul champ (similaire aux types génériques).
Opérations DDL : Définition des structures
Gestion des Bases de Données
-- Création d'un espace de travail
CREATE DATABASE IF NOT EXISTS ventes_db;
-- Utilisation de la base
USE ventes_db;
-- Suppression sécurisée (échoue si non vide)
DROP DATABASE ventes_db RESTRICT;
-- Suppression forcée (supprime tout le contenu)
DROP DATABASE ventes_db CASCADE;
Création de Tables
La création de table définit comment les fichiers plats sur HDFS sont interprétés par Hive.
CREATE TABLE IF NOT EXISTS commandes (
id_commande INT,
client STRING,
montant DOUBLE
)
PARTITIONED BY (annee INT, mois INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
Comparaison : Tables Internes vs Externes
| Caractéristique | Table Interne (Managed) | Table Externe (External) |
|---|---|---|
| Contrôle des données | Hive gère les métadonnées et les fichiers | Hive ne gère que les métadonnées |
| Effet du DROP TABLE | Supprime métadonnées ET fichiers HDFS | Supprime uniquement les métadonnées |
| Emplacement standard | Répertoire Warehouse par défaut | Défini via la clause LOCASION |
Opérations DML : Manipulation des données
Chargement de fichiers (LOAD)
-- Import depuis le système de fichiers local
LOAD DATA LOCAL INPATH '/tmp/data_clients.csv'
INTO TABLE clients;
-- Déplacement d'un fichier depuis HDFS vers une partition
LOAD DATA INPATH '/hdfs/staging/ventes_octobre.txt'
OVERWRITE INTO TABLE commandes
PARTITION (annee=2023, mois=10);
Insertion via requête (INSERT)
-- Ajout de données à partir d'une autre table
INSERT INTO TABLE archive_ventes
SELECT * FROM commandes WHERE annee = 2022;
-- Remplacement complet du contenu
INSERT OVERWRITE TABLE stats_quotidiennes
SELECT date_jour, count(*) FROM logs GROUP BY date_jour;
Transfert de tables (EXPORT / IMPORT)
Ces commandes sont principalement utilisées pour migrer des tables entre différents clusters Hadoop.
-- Exportation vers un dossier HDFS (inclut les données et les métadonnées)
EXPORT TABLE commandes TO '/backup/hive/commandes';
-- Importation sur un nouveau cluster
IMPORT TABLE commandes_backup FROM '/backup/hive/commandes';