Maison  >  Article  >  développement back-end  >  Cinq choses que vous devez apprendre pour éviter les pièges lorsque vous débutez avec les partitions HIVE

Cinq choses que vous devez apprendre pour éviter les pièges lorsque vous débutez avec les partitions HIVE

坏嘻嘻
坏嘻嘻original
2018-09-15 11:11:101699parcourir

Cet article vous apporte les cinq connaissances majeures que vous devez apprendre pour éviter les pièges lorsque vous débutez avec le partitionnement HIVE. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Hive - Premiers pas avec le partitionnement [Fichier] est stocké dans des catégories et ne peut être affiné qu'en [Fichier], mais le contenu ne peut pas être affiné. Cependant, une seule classe (zone) peut être spécifiée dans une seule. opération ;

2 : Une opération de partition dynamique peut être divisée en fonction du contenu spécifique du champ. Multi-catégorie (zone)

3 : Le but du partitionnement est de restreindre la portée de la requête et d'améliorer la requête ; efficacité d'une seule table lors de l'interrogation d'une seule table

4 : Comme la partition est spécifiée sur la ligne de commande pour le partitionnement statique, la couche inférieure n'exécute pas le programme mr (la partition dynamique relativement rigide exécute le programme mr et extrait) ; les champs correspondants (relativement intelligents)

Étapes de démonstration :
1. Créer une table de partition étudiante

95001, Li Yong ,Male,20,CS
95002, Liu Chen, Femme, 19 ans, IS

95003, Wang Min, Femme, 22 ans, MA

95004, Zhang Li, Homme, 19 ans, IS

95005, Liu Gang, homme, 18 ans, MA

95006, Sun Qing, homme, 23 ans, CS


Créer et voir si cela réussit


Ajouter du contenu
(1)charger

--分区表创建create table t_students(id int,name string,sex string)
partitioned by (age int,class string)row format delimited fields terminated by ',' ;

(2)insert

Insert in Hive est principalement utilisé en conjonction avec l'instruction de requête select.
hive> set hive.cli.print.header=true;hive> select * from t_students;OK
t_students.id   t_students.name t_students.sex  t_students.age  t_students.class


Après l'exécution, vous pouvez afficher la table SDS de métadonnées. informations

--静态分区load data local inpath '/root/logs/students.txt' into table t_students partition (age=19,class='MA');


Après avoir ajouté à nouveau les données, les informations de la table SDS de métadonnées restent inchangées et les fichiers sous chaque chemin de partition deviennent deux copies
--动态分区set hive.exec.dynamic.partition=true;set hive.exec.dynamic.partition.mode=nonstrict;insert overwrite table t_students  partition (age,class) 
select * from t_student;


Cinq choses que vous devez apprendre pour éviter les pièges lorsque vous débutez avec les partitions HIVEhive bucketing

--使用同样的数据,再次追加insert一次数据
hive> insert into table t_students  partition (age,class) select * from t_student;
Le bucketing est une division plus fine des partitions relatives. Le bucketing divise l'intégralité du contenu des données en compartiments en fonction de la valeur de hachage d'un certain attribut de colonne. Pour diviser l'attribut de nom en trois compartiments, la valeur de hachage de la valeur de l'attribut de nom est modulée par 3 et les données sont divisées en compartiments en fonction. le résultat modulo. Par exemple, les enregistrements de données avec un résultat modulo de 0 sont stockés dans un fichier, les données avec une valeur modulo de 1 sont stockées dans un fichier et les enregistrements de données avec une valeur modulo de 2 sont stockés dans un fichier.

Remarque :
Tout d'abord, exécutez la commande hive.enforce.bucketiong=true avant le bucketing ; Cinq choses que vous devez apprendre pour éviter les pièges lorsque vous débutez avec les partitions HIVEDeuxièmement, utilisez le mot-clé clustered by pour spécifier le nom de la colonne sur laquelle la partition est basée, et spécifiez également le nombre de partitions. à diviser en. Bucket, spécifié ici est divisé en 3 buckets.

Troisièmement, contrairement au partitionnement, le partitionnement n'est pas basé sur les colonnes du fichier de table de données réelles, mais sur les pseudo-colonnes que nous spécifions, mais le bucketing est basé sur les colonnes réelles de la table de données au lieu des pseudo-colonnes. Par conséquent, lors de la spécification de la colonne basée sur le partitionnement, vous devez spécifier le type de colonne, car cette colonne n'existe pas dans le fichier de table de données, ce qui équivaut à créer une nouvelle colonne. Le bucketing est basé sur une colonne qui existe déjà dans la table. Le type de données de cette colonne est évidemment connu, il n'est donc pas nécessaire de spécifier le type de colonne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn