web-dev-qa-db-fra.com

création d'une partition dans une table externe dans la ruche

J'ai créé et ajouté avec succès partitions dynamiques dans un table interne dans Hive. c'est-à-dire en utilisant les étapes suivantes:

1-créé une table source

2 données chargées du local dans la table source

3- créé une autre table avec des partitions - partition_table

4- inséré les données dans cette table à partir de la table source résultant en la création dynamique de toutes les partitions

Ma question est, comment effectuer cela dans une table externe? J'ai lu tellement d'articles à ce sujet, mais je suis confus, que dois-je spécifier le chemin d'accès aux partitions déjà existantes pour créer des partitions pour la table externe ??

exemple: Étape 1:

create external table1 ( name string, age int, height int)
location 'path/to/dataFile/in/HDFS';

Étape 2:

alter table table1 add partition(age) 
location 'path/to/already/existing/partition'

Je ne sais pas comment procéder avec le partitionnement dans des tables externes. Quelqu'un peut-il s'il vous plaît aider en donnant une description étape par étape de la même chose?.

Merci d'avance!

11
Anoop Mamgain

1. Définir la propriété ci-dessous

set Hive.exec.dynamic.partition=true

set Hive.exec.dynamic.partition.mode=nonstrict

2. Créer une table partitionnée externe

create external table1 ( name string, age int, height int) location 'path/to/dataFile/in/HDFS';

. Insérez des données dans la table partitionnée à partir de la table source.

Fondamentalement, le processus est le même. c'est juste que vous créez une table partitionnée externe et fournissez un chemin HDFS vers la table sous laquelle il va créer et stocker la partition.

J'espère que cela t'aides.

4
pradeep

Oui, vous devez indiquer explicitement à Hive quel est votre champ de partition.

Considérez que vous disposez d'un répertoire HDFS suivant sur lequel vous souhaitez créer une table externe.

/path/to/dataFile/

Supposons que ce répertoire possède déjà des données stockées (partitionnées) par département:

/path/to/dataFile/dept1
/path/to/dataFile/dept2
/path/to/dataFile/dept3

Chacun de ces répertoires a un tas de fichiers où chaque fichier contient des données réelles séparées par des virgules pour des champs comme le nom, l'âge, la taille.

e.g.
    /path/to/dataFile/dept1/file1.txt
    /path/to/dataFile/dept1/file2.txt

Créons maintenant une table externe à ce sujet:

Étape 1. Créez une table externe:

CREATE EXTERNAL TABLE testdb.table1(name string, age int, height int)
PARTITIONED BY (dept string)
ROW FORMAT DELIMITED
STORED AS TEXTFILE
LOCATION '/path/to/dataFile/';

Étape 2. Ajoutez des partitions:

ALTER TABLE testdb.table1 ADD PARTITION (dept='dept1') LOCATION '/path/to/dataFile/dept1';
ALTER TABLE testdb.table1 ADD PARTITION (dept='dept2') LOCATION '/path/to/dataFile/dept2';
ALTER TABLE testdb.table1 ADD PARTITION (dept='dept3') LOCATION '/path/to/dataFile/dept3';

Terminé, exécutez la requête de sélection une fois pour vérifier si les données ont été chargées avec succès.

39
Sachin Gaikwad

Suivez les étapes ci-dessous:

  1. Créer une table temporaire/table source

    create table source_table(name string,age int,height int) row format delimited by ',';
    

    Utilisez votre délimiteur comme dans le fichier au lieu de ',';

  2. Charger des données dans la table source

    load data local inpath 'path/to/dataFile/in/HDFS';
    
  3. Créer une table externe avec partition

    create external table external_dynamic_partitions(name string,height int) 
    partitioned by (age int) 
    location 'path/to/dataFile/in/HDFS';
    
  4. Activer le mode de partition dynamique sans restriction

    set Hive.exec.dynamic.partition.mode=nonstrict
    
  5. Charger des données dans une table externe avec des partitions à partir du fichier source

    insert into table external_dynamic partition(age) 
    select * from source_table;
    

C'est tout. Vous pouvez vérifier les informations sur les partitions en utilisant

show partitions external_dynamic;

Vous pouvez même vérifier s'il s'agit d'une table externe ou non

describe formatted external_dynamic;

La table externe est un type de table dans Hive où les données ne sont pas déplacées vers l'entrepôt Hive. Cela signifie que même si vous supprimez la table, les données persistent et vous obtiendrez toujours les dernières données, ce qui n'est pas le cas avec la table gérée.

0
bgt

La bonne façon de le faire.

  1. Créez la table et mentionnez qu'elle est partitionnée.

    créer une table externe1 (chaîne de nom, âge int, hauteur int) partitionnée par (âge int) stockée sous **** (votre format) emplacement 'chemin/vers/fichier de données/dans/HDFS';

  2. Vous devez maintenant actualiser les partitions dans la métastore Hive.

    table de réparation msck table1

Cela se chargera de charger toutes vos partitions dans la métastore Hive.

Vous pouvez utiliser la table de réparation msck à tout moment de votre processus pour mettre à jour le métastore.

0
Tharun Kumar