Introduction aux types de tables dans Hive
Apache Hive propose deux catégories principales de tables : les tables gérées (Managed Tables), qui sont définies par défaut, et les tables externes (External Tables), créées en ajoutant le mot-clé EXTERNAL. La distinction fondamentale entre ces deux types réside dans la gestion du cycle de vie des données. Lorsqu'une instruction DROP TABLE est exécutée, une table gérée supprime à la fois les données physiques stockées sur HDFS et les métadonnées associées dans le Metastore (généralement MySQL). En revanche, la suppression d'une table externe n'efface que les métadonnées, laissant les fichiers de données intacts sur HDFS.
Création et suppression d'une table externe
Voici un exemple de création d'une table externe pointant vers un répertoire HDFS spécifique :
CREATE EXTERNAL TABLE sales_external (
transaction_id INT,
product_name STRING,
category STRING,
quantity INT,
sale_date STRING,
amount DOUBLE,
discount DOUBLE,
store_id INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/data/warehouse/external/sales';
Après la création, nous pouvons vérifier la présence des données sur HDFS :
hive> dfs -ls /data/warehouse/external/sales;
Found 1 items
-rw-r--r-- 3 hdfs supergroup 1024 2023-10-15 10:00 /data/warehouse/external/sales/sales_data.csv
Les métadonnées sont également enregistrées dans le Metastore :
mysql> SELECT TBL_NAME, TBL_TYPE FROM TBLS WHERE TBL_NAME = 'sales_external'\G
*************************** 1. row ***************************
TBL_NAME: sales_external
TBL_TYPE: EXTERNAL_TABLE
Si nous supprimons cette table externe :
hive> DROP TABLE sales_external;
OK
Time taken: 0.85 seconds
Une vérification ultérieure sur HDFS confirme que les données sont toujours présentes :
hive> dfs -ls /data/warehouse/external/sales;
Found 1 items
-rw-r--r-- 3 hdfs supergroup 1024 2023-10-15 10:00 /data/warehouse/external/sales/sales_data.csv
Cependant, l'interrogation du Metastore ne retournera aucun résultat, prouvant que seules les métadonnées ont été purgées.
Création et suppression d'une table gérée
Contrairement aux tables externes, les tables gérées ne nécessitent pas le mot-clé EXTERNAL et utilisent le répertoier d'entrepôt par défaut défini par la propriété hive.metastore.warehouse.dir dans le fichier de configuration hive-site.xml.
CREATE TABLE inventory_managed (
item_id INT,
item_name STRING,
supplier STRING,
stock_quantity INT,
last_updated STRING,
unit_price DOUBLE,
warehouse_id INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|';
Nous pouvons vérifier le répertoire par défaut utilisé par Hive :
hive> SET hive.metastore.warehouse.dir;
hive.metastore.warehouse.dir=/user/hive/warehouse
Les données chargées dans cette table seront stockées sous /user/hive/warehouse/default.db/inventory_managed. Les métadonnées sont bien présentes dans le Metastore avec le type MANAGED_TABLE.
Procédons à la suppression de la table gérée :
hive> DROP TABLE inventory_managed;
OK
Time taken: 0.12 seconds
En tentant d'accéder au répertoire HDFS correspondant, nous obtenons une erreur indiquant que le répertoire n'existe plus :
hive> dfs -ls /user/hive/warehouse/default.db/inventory_managed;
ls: `/user/hive/warehouse/default.db/inventory_managed': No such file or directory
Les métadonnées sont également supprimées du Metastore. La table gérée entraîne donc une destruction complète des données et des métadonnées.
Identification du type de table
Pour déterminer si une table est gérée ou externe, vous pouvez uitliser la commande DESCRIBE FORMATTED dans l'interface Hive :
hive> DESCRIBE FORMATTED inventory_managed;
Dans la sortie, recherchez la ligne Table Type, qui indiquera soit MANAGED_TABLE, soit EXTERNAL_TABLE.
Alternativement, vous pouvez interroger directement la base de données du Metastore :
mysql> SELECT TBL_NAME, TBL_TYPE FROM TBLS WHERE TBL_NAME = 'inventory_managed'\G
Cas d'utilisation
Le choix entre une table gérée et une table externe dépend des exigences de gestion des données :
- Tables Externes : Idéales pour les données partagées entre plusieurs départements ou pour les fichiers de logs bruts. Étant donné que la suppression de la table ne détruit pas les données sous-jacentes sur HDFS, cela offre une couche de sécurité supplémentaire. En cas de suppression accidentelle des métadonnées, il suffit de recréer la table en pointant vers le même emplacement HDFS pour restaurer l'accès aux données.
- Tables Gérées : Adaptées aux données temporaires, aux résultats de transformations intermédiaires ou lorsque Hive doit avoir le contrôle total sur le cycle de vie des données, y compris leur stockage et leur nettoyage.