Le combat réel de la table de partition en mode de conception Hive

table des matières

0 table de partition

1 Fonctionnement de base de la table de partition

2 Partition secondaire

3 Réglage dynamique de la partition


0 table de partition

La table de partition correspond en fait à un dossier indépendant sur le système de fichiers HDFS, et tous les fichiers de données de la partition se trouvent sous ce dossier. La partition dans Hive est le sous-répertoire , qui divise un grand ensemble de données en petits ensembles de données en fonction des besoins de l'entreprise. Dans la requête, la partition spécifiée requise par la requête est sélectionnée via l'expression dans la clause WHERE, et l'efficacité de la requête sera considérablement améliorée.

1 Fonctionnement de base de la table de partition

1 ) Introduisez la table de partition (le journal doit être géré en fonction de la date et simulé par les informations du service)

dept_20200401.log

dept_20200402.log

dept_20200403.log

2 ) Créer une syntaxe de table de partition

hive (default)> create table dept_partition(

deptno int, dname string, loc string

)

partitioned by (day string)

row format delimited fields terminated by '\t';

Remarque: Le champ de partition ne peut pas être des données qui existent déjà dans la table. Le champ de partition peut être considéré comme une pseudo-colonne de la table.

3 ) Chargez les données dans la table de partition

  • préparation des données

dept_20200401.log

10 COMPTABILITÉ 1700

20 RECHERCHE 1800

dept_20200402.log

30 VENTES 1900

40 OPÉRATIONS 1700

dept_20200403.log

50 ESSAI 2000

60 DEV 1900

  • Télécharger les données
hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table dept_partition partition(day='20200401');

hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200402.log' into table dept_partition partition(day='20200402');

hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200403.log' into table dept_partition partition(day='20200403');

Remarque: lors du chargement de données dans la table de partition, vous devez spécifier la partition

4 ) Interrogez les données dans la table de partition

Requête de partition unique

hive (default)> select * from dept_partition where day='20200401';

Requête conjointe multi-partition

hive (default)> select * from dept_partition where day='20200401'

              union

              select * from dept_partition where day='20200402'

              union

              select * from dept_partition where day='20200403';

hive (default)> select * from dept_partition where day='20200401' or

                day='20200402' or day='20200403'; 

5 ) Augmentez la partition

Créer une seule partition

hive (default)> alter table dept_partition add partition(day='20200404');

Créez plusieurs partitions en même temps

hive (default)> alter table dept_partition add partition(day='20200405') partition(day='20200406');

6 ) Supprimer la partition

Supprimer une seule partition

hive (default)> alter table dept_partition drop partition (day='20200406');

Supprimer plusieurs partitions en même temps

hive (default)> alter table dept_partition drop partition (day='20200404'), partition(day='20200405');

7 ) Afficher le nombre de partitions de la table de partition

hive> show partitions dept_partition;

8 ) Afficher la structure de la table de partition

hive> desc formatted dept_partition;

# Partition Information         

# col_name              data_type               comment            

month                   string    

2 Partition secondaire

Réflexion: comment diviser les données du journal en une journée?

1 ) Créer une table de partition secondaire

hive (default)> create table dept_partition2(

               deptno int, dname string, loc string

               )

               partitioned by (day string, hour string)

               row format delimited fields terminated by '\t';

 

2 ) Chargement normal des données

(1) Charger les données dans la table de partition secondaire

hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table

dept_partition2 partition(day='20200401', hour='12');

(2) Interroger les données de partition

hive (default)> select * from dept_partition2 where day='20200401' and hour='12';

3 ) données directement téléchargées sur la partition d'annuaire , de sorte que la table de partition et les données associées générées de trois manières

(1) Méthode 1: Réparer après le téléchargement des données

télécharger des données

hive (default)> dfs -mkdir -p

 /user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=13;

hive (default)> dfs -put /opt/module/datas/dept_20200401.log  /user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=13;

Interroger les données (les données qui viennent d'être téléchargées ne peuvent pas être interrogées)

hive (default)> select * from dept_partition2 where day='20200401' and hour='13';

Exécuter la commande de réparation

hive> msck repair table dept_partition2;

Interroger à nouveau les données

hive (default)> select * from dept_partition2 where day='20200401' and hour='13';

(2) Méthode 2: Ajouter une partition après le téléchargement des données

télécharger des données

hive (default)> dfs -mkdir -p

 /user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=14;

hive (default)> dfs -put /opt/module/hive/datas/dept_20200401.log  /user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=14;

Exécuter l'ajout de partition

  

  hive (default)> alter table dept_partition2 add partition(day='201709',hour='14');

Requête de données

hive (default)> select * from dept_partition2 where day='20200401' and hour='14';

(3) Méthode 3: Chargez les données sur la partition après avoir créé le dossier

Créer un annuaire

hive (default)> dfs -mkdir -p

 /user/hive/warehouse/mydb.db/dept_partition2/day=20200401/hour=15;

télécharger des données

hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table

 dept_partition2 partition(day='20200401',hour='15');

Requête de données

hive (default)> select * from dept_partition2 where day='20200401' and hour='15';

3 Réglage dynamique de la partition

Dans une base de données relationnelle, lors de l'insertion de données dans une table partitionnée, la base de données insère automatiquement les données dans la partition correspondante en fonction de la valeur du champ de partition. Hive fournit également un mécanisme similaire, à savoir la partition dynamique (partition dynamique), mais, Pour utiliser la partition dynamique de Hive, vous devez la configurer en conséquence.

1 ) Ouvrez le paramétrage de la partition dynamique

(1) Ouvrez la fonction de partition dynamique (true par défaut, ouvert)

hive.exec.dynamic.partition=true

(2) Défini sur le mode non strict (le mode de partition dynamique, la valeur par défaut est strict, ce qui signifie qu'au moins une partition doit être désignée comme partition statique, et le mode non strict signifie que tous les champs de partition sont autorisés à utiliser des partitions dynamiques .)

hive.exec.dynamic.partition.mode=nonstrict

(3) Sur tous les nœuds qui exécutent MR, combien de partitions dynamiques au maximum peuvent-elles être créées? Par défaut 1000

hive.exec.max.dynamic.partitions=1000

(4) Sur chaque nœud qui exécute MR , combien de partitions dynamiques au maximum peuvent être créées. Ce paramètre doit être défini en fonction des données réelles. Par exemple, si les données source contiennent des données d'une année, c'est-à-dire que le champ jour a 365 valeurs, ce paramètre doit être défini pour être supérieur à 365. Si la valeur par défaut de 100 est utilisée, une erreur sera signalée.

hive.exec.max.dynamic.partitions.pernode=100

(5) Le nombre maximum de fichiers HDFS qui peuvent être créés dans l'ensemble du travail MR. Par défaut 100000

hive.exec.max.created.files=100000

(6) Indique si une exception est levée lorsqu'une partition vide est générée. Généralement pas besoin d'être défini. Valeur par défaut false

hive.error.on.empty.partition=false

2 ) Pratique de cas

Condition: insérer les données de la table dept dans la partition correspondante de la table cible dept_partition en fonction de la région (champ loc).

(1) Créez la table de partition cible

hive (default)> create table dept_partition_dy(id int, name string) partitioned by (loc int) row format delimited fields terminated by '\t';

(2) Configurer la partition dynamique

set hive.exec.dynamic.partition.mode = nonstrict;

hive (default)> insert into table dept_partition_dy partition(loc) select deptno, dname, loc from dept;

(3) Afficher la situation de partition de la table de partition cible

hive (default)> show partitions dept_partition;

Réflexion: Comment la table de partition cible correspond-elle au champ de partition?

Je suppose que tu aimes

Origine blog.csdn.net/godlovedaniel/article/details/110775274
conseillé
Classement