Hive (4) Langage DDL de définition de base de données Hive

4. Définition des données DDL

4.1 Créer une base de données

  • Créez une base de données. Le chemin de stockage par défaut de la base de données sur HDFS est /opt/hive/warehouse/*.db
create database hivetest;
  • Pour éviter les erreurs dans la base de données à créer, ajoutez s'il n'existe pas de jugement.(标准写法)
create database if not exists hivetest;

image-20200916163107048

  • Créez une base de données et spécifiez l'emplacement où la base de données est stockée sur HDFS
create database if not exists hivetest location 'hdfs路径';

image-20200916163354544

4.2 Interroger la base de données

  • Afficher la base de données
show databases;

image-20200916165802686

Filtrer et afficher la base de données des requêtes

show databases like 'hivetest*';

image-20200916165936990

  • Afficher les détails de la base de données
desc database hivetest;

image-20200916170340247

  • Changer de base de données actuelle
use 目标数据库名称;

4.3 Supprimer la base de données

  • Supprimer la base de données vide
drop database 库名;
  • Si la base de données supprimée n'existe pas, il est préférable de l'utiliser pour déterminer si la base de données existe
drop database if exists 库名;
  • Si la base de données n'est pas vide, vous pouvez utiliser la commande cascade pour forcer la suppression
drop database 库名 cascade;

4.4 Créer une table

  • Syntaxe de construction de table
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
[CLUSTERED BY (col_name, col_name, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
  • Explication sur le terrain

(1) CREATE TABLE crée une table avec un nom spécifié. Si une table avec le même nom existe déjà, une exception est levée; l'utilisateur peut utiliser l'option IF NOT EXISTS pour ignorer cette exception.

(2) Le mot-clé EXTERNAL permet aux utilisateurs de créer une table externe et de spécifier un chemin vers les données réelles (LOCATION) lors de la construction de la table Hive创建内部表时,会将数据移动到数据仓库指向的路径; si une table externe est créée, seul le chemin où se trouvent les données est enregistré, sans aucune modification de l'emplacement des données . Lorsqu'une table est supprimée, les métadonnées et les données de la table interne seront supprimées ensemble, tandis que la table externe supprime uniquement les métadonnées, pas les données.

(3) COMMENTAIRE: Ajoutez des notes aux tableaux et aux colonnes.

(4) PARTITIONED BY pour créer une table de partition

(5) CLUSTERED BY crée une table à compartiments

(6) SORTED BY n'est pas couramment utilisé

(7) FORMAT DE RANGÉE

DELIMITED [CHAMPS TERMINÉS PAR CAR] [ÉLÉMENTS DE COLLECTION TERMINÉS PAR CAR]

[CLÉS DE CARTE TERMINÉES PAR CAR] [LIGNES TERMINÉES PAR CAR]

| SERDE nom_serde [WITH SERDEPROPERTIES (nom_propriété = valeur_propriété, nom_propriété = valeur_propriété,…)]

Les utilisateurs peuvent personnaliser le SerDe ou utiliser le SerDe intégré lors de la création de la table. Si ROW FORMAT ou ROW FORMAT DELIMITED n'est pas spécifié, le SerDe intégré sera utilisé. Lors de la création d'une table, l'utilisateur doit également spécifier des colonnes pour la table. Lorsqu'il spécifie les colonnes de la table, l'utilisateur spécifie également un SerDe personnalisé. Hive détermine les données de colonne spécifiques de la table via SerDe.

SerDe est l'abréviation de Serialize / Deserilize, qui est utilisée pour la sérialisation et la désérialisation.

(8) STORED AS type de fichier de stockage désigné

Types de fichiers de stockage couramment utilisés: SEQUENCEFILE (fichier de séquence binaire), TEXTFILE (texte), RCFILE (fichier de format de stockage de colonne)

Si les données du fichier sont du texte brut, vous pouvez utiliser STORED AS TEXTFILE. Si les données doivent être compressées, utilisez STORED AS SEQUENCEFILE.

(9)LOCATION :指定表在HDFS上的存储位置。

(10) LIKE permet aux utilisateurs de copier la structure de table existante, mais ne copie pas les données.

4.4.1 Table interne

Les tables créées par défaut sont des tables dites de gestion, parfois appelées tables internes. En raison de ce type de table, Hive contrôlera (plus ou moins) le cycle de vie des données. Par défaut, Hive stocke les données de ces tables dans un sous-répertoire du répertoire défini par l'élément de configuration hive.metastore.warehouse.dir (par exemple, / opt / hive / entrepôt). 当我们删除一个管理表时,Hive也会删除这个表中数据。Les tableaux de gestion ne conviennent pas pour le partage de données avec d'autres outils.

  • Table de création ordinaire
create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t';
  • Créez une table basée sur le résultat de la requête (le résultat de la requête sera ajouté à la table nouvellement créée)
create table if not exists student3 as select id, name from student;
  • Créer une table basée sur une structure de table existante
create table if not exists student4 like student;
  • Type de table de consultation
desc formatted student2;

4.4.2 Table externe

Étant donné que la table est une table externe, Hive ne pense pas qu'elle possède complètement ces données.删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

  • Utiliser des scénarios pour les tables de gestion et les tables externes

Les journaux de site Web collectés sont régulièrement diffusés dans des fichiers texte HDFS chaque jour. Faites beaucoup d'analyses statistiques sur la base de la table externe (table de log d'origine). La table intermédiaire et la table de résultat utilisées sont stockées dans la table interne, et les données entrent dans la table interne par SELECT + INSERT.

Cas détaillé

Créez des tables externes d'employés et importez des données dans les tables.

Michael|Montreal,Toronto|Male,30|DB:80|Product:DeveloperLead
Will|Montreal|Male,35|Perl:85|Product:Lead,Test:Lead
Shelley|New York|Female,27|Python:80|Test:Lead,COE:Architect
Lucy|Vancouver|Female,57|Sales:89|Sales:Lead
  • Déclaration de construction de table

Créer une table des employés

create external table if not exists employee(
name string,
address array<string>,
personalInfo array<string>,
technol map<string,int>,
jobs map<string,string>)
row format delimited
fields terminated by '|'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';

Importer des données dans une table externe

load data local inpath '/root/employee.txt' into table employee;

résultat de la recherche

select * from employee;

image-20200916201159535

4.4.3 Conversion mutuelle entre les tables de gestion et les tables externes

  • Modifier la table interne student2 comme table externe
alter table student2 set tblproperties('EXTERNAL'='TRUE');
  • Modifier la table externe student2 comme table interne
alter table student2 set tblproperties('EXTERNAL'='FALSE');

注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!

4.5 table de partition (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. Hive中的分区就是分目录, Divisez un grand ensemble de données en petits ensembles de données en fonction des besoins de l'entreprise. Lors de l'interrogation, sélectionnez la partition spécifiée requise par la requête via l'expression dans la clause WHERE. Cette efficacité de la requête s'améliorera beaucoup.

4.5.1 Fonctionnement de base de la table de partition

Les données

10,ACCOUNTING,NEW YORK
10,ACCOUNTING,NEW YORK
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
20,RESEARCH,DALLAS
20,RESEARCH,DALLAS
30,SALES,CHICAGO
30,SALES,CHICAGO

1. Introduire une table de partition (le journal doit être géré en fonction de la date)

/opt/hive/warehouse/log_partition/20170702/20170702.log
/opt/hive/warehouse/log_partition/20170703/20170703.log
/opt/hive/warehouse/log_partition/20170704/20170704.log

2. Créer une syntaxe de table de partition

create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by ',';

3. Charger des données dans la table de partition

load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201707’);
load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201708);
load data local inpath '/opt/dept.txt' into table default.dept_partition partition(month='201709);

image-20200916231329604

image-20200916230900306

image-20200916230917167

4. Interroger les données dans la table de partition

Requête de partition unique

select * from dept_partition where month='201709';

image-20200916231504421

Requête conjointe multi-partition

select * from dept_partition where month='201709'
union
select * from dept_partition where month='201708'
union
select * from dept_partition where month='201707';

Remarque

Les versions antérieures à Hive 1.2.0 ne prennent en charge que UNION ALL, dans lesquelles les lignes en double ne seront pas supprimées.

Dans Hive 1.2.0 et versions ultérieures, le comportement par défaut d'UNION consiste à supprimer les lignes en double des résultats.

5. Augmenter la partition

alter table dept_partition add partition(month='201706') ;
alter table dept_partition add partition(month='201705') ,partition(month='201704');

6. Supprimer la partition

alter table dept_partition drop partition (month='201704');
alter table dept_partition drop partition (month='201705'), partition (month='201706')

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

show partitions dept_partition;

8. Afficher la structure de la table de partition

desc formatted dept_partition;

4.6 Modifier le tableau

4.6.1 Renommer la table

  • grammaire
ALTER TABLE table_name RENAME TO new_table_name
  • Exemple
alter table dept_partition2 rename to dept_partition3;

4.6.2 Ajouter / modifier / remplacer les informations de colonne

  • grammaire

Mettre à jour la colonne

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]

Ajouter et remplacer des colonnes

ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) 

Remarque: AJOUTER signifie ajouter un nouveau champ, la position du champ est derrière toutes les colonnes (avant la colonne de partition), REMPLACER signifie remplacer tous les champs de la table.

  • Cas

Ajouter une colonne

alter table dept_partition add columns(deptdesc string);

Mettre à jour la colonne

alter table dept_partition change column deptdesc desc int;

Remplacer la colonne

alter table dept_partition replace columns(deptno string, dname string, loc string);

image-20200917192015967

image-20200917192028686

4.6.3 Supprimer le tableau

drop table dept_partition;

Remarque: La table externe ne peut pas être supprimée simplement par cette commande. Cette commande ne peut supprimer que les métadonnées de la table externe. Il n'existe aucun moyen de supprimer les données sur le hdfs. Si vous devez supprimer complètement la table externe, il existe les méthodes suivantes:

  • Option 1: convertir en table interne et supprimer
ALTER TABLE xxx SET TBLPROPERTIES('EXTERNAL'='False');

drop table xxx;
  • Option 2: supprimer les métadonnées, puis utiliser hdfs pour supprimer les données

Je suppose que tu aimes

Origine blog.csdn.net/zmzdmx/article/details/108651190
conseillé
Classement