2012-06-12 1 views
2

J'utilise hive (avec des tables externes) pour traiter les données stockées sur amazon S3.Hive Table ajouter une partition pour charger tous les sous-répertoires

Mes données est partitionné comme suit: group/team/dt/ (par exemple, un fichier de données peuvent être stockées dans un chemin group=myGroup/team=myTeam/dt=20120603)

Je voudrais traiter des données pour plusieurs équipes (dans différents groupes). Comme RCOVER PARTITIONS prend beaucoup de temps, je souhaite ajouter plusieurs partitions basées sur des valeurs de groupe et d'équipe à la table Hive (c'est-à-dire, des données de groupe et d'équipe pour toutes les dates disponibles dans cette équipe).

La fonctionnalité que je suis à la recherche est:

CREATE EXTERNAL TABLE myData(
attr1 string, attr2 string, attr3 string) 
PARTITIONED BY (group string, team string, dt string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION 's3://myBucket/${DATA_ROOT_DIR}'; 

-- Add paritions without specifying values for dt 
ALTER TABLE myData ADD PARTITION (group='group1',team='team1') ; 
ALTER TABLE myData ADD PARTITION (group='group2',team='team2') ; 

Merci!

Répondre

5

Hive ne connaît pas ces répertoires jusqu'à ce que vous en parliez, il n'y a donc aucun moyen d'accéder aux partitions sans les ajouter.

Vous pouvez écrire un script simple d'ajouter toutes les partitions pour une équipe/groupe donné:

results = "ALTER TABLE something ADD " 
groups.each do |group| 
    teams.each do |team| 
    partitions = listDirectories("s3n://bucket/", group, team) 
    partitions.each do |partition| 
     results += "PARTITION(group='#{group}', team='#{team}', dt='#{partition}')" 
    end 

    end 
end 

puts results 

On dirait que vous utilisez le DME (ruche régulière n'a même pas RÉCUPÉRER CLOISONS), c'est à peu près ce que fait RECOVER PARTITIONS de toute façon, mais de cette façon vous avez plus de contrôle au moins.

L'autre option consiste à ajouter les partitions lorsque vous ajoutez les données, et assurez-vous simplement que toutes les partitions restent à jour.

0

S'il vous plaît vérifier Insérer partition dynamique - https://cwiki.apache.org/confluence/display/Hive/Tutorial#Tutorial-DynamicpartitionInsert

dans cette méthode, la colonne elle-même devient la partition. Cela évite effectivement de coder en dur le nom de la partition dans l'instruction insert.

+0

La question concerne la récupération/l'ajout d'une partition et non la création dynamique d'une partition. Selon la question, la partition existe déjà, il veut récupérer certaines partitions de manière sélective. –

Questions connexes