1. Format de stockage des fichiers de la table Hive
Définissez le format de stockage de la table à travers ce qui précède stocké comme opération
Les formats de stockage des fichiers de ruche sont divisés en quatre types:
TEXTFILE, SEQUENCEFILE, RCFILE, ORCFILE
Parmi eux, TEXTFILE est le format par défaut, et celui par défaut n'est pas spécifié lors de la création de la table. Lors de l'importation de données, copiez directement le fichier de données vers HDFS sans traitement;
Les tables de format SEQUENCEFILE, RCFILE, ORCFILE ne peuvent pas importer directement des données à partir de fichiers locaux, les données doivent d'abord être importées dans la table de format textfile, puis utiliser l'insertion de la table pour importer SEQUENCEFILE, RCFILE, ORCFILE;
1.1 Format TEXTFILE
Le format par défaut, les données ne sont pas compressées, la surcharge du disque est grande et la surcharge d'analyse des données est grande;
Il peut être utilisé en combinaison avec Gzip et Bzip (le système vérifie et décompresse automatiquement lors de l'exécution d'une requête), mais de cette manière, hive ne divise pas les données par défaut, de sorte que les données ne peuvent pas être utilisées en parallèle;
Dans le processus de désérialisation, vous devez déterminer s'il s'agit d'un séparateur ou d'un terminateur de ligne caractère par caractère, de sorte que la surcharge de désérialisation est la plus importante;
1.1.1 Créez une table UserInfo:
créer une table s'il n'existe pas user_info (id bigint, username String, password String, sex String) champs délimités au format de ligne terminés par '' stockés en tant que fichier texte;
1.1.2 Utilisez l'instruction de chargement pour charger des données:
1 u1 p1 mâle
2 u2 p2 mâle
3 u3 p3 mâle
4 u4 p4 mâle
charger les données du chemin local ' / opt / module / hive / data / user_info ' écraser dans la table user_info;
1.1.3 Afficher les données du tableau:
sélectionnez * dans user_info;
1.2 Format SEQUENCEFILE
SequenceFile est un fichier binaire fourni par l'API hadoop, qui sérialise les données dans un fichier sous une forme binaire; ce fichier binaire utilise en interne l'interface accessible en écriture de la vertèbre standard de hadoop pour implémenter la sérialisation et la désérialisation; il est utilisé dans l'API hadoop Les MapFiles sont compatibles les uns avec les autres; le SequenceFile dans Hive hérite du SequenceFile de l'API hadoop, mais sa clé est vide et la valeur est utilisée pour stocker la valeur réelle. Ceci pour éviter le MR pendant la phase de carte du processus de tri;
1.2.1 Créer une table:
créer une table s'il n'existe pas user_info_seq (id bigint, chaîne de nom d'utilisateur, chaîne de mot de passe, chaîne de sexe) champs délimités au format de ligne terminés par ' \ t ' stockés en tant que fichier de séquence;
1.2.2 Importation de données:
insert overwrite table user_info_seq select * from user_info;
1.2.3 Afficher les données du tableau:
sélectionnez * dans user_info_seq;
1.3 Format RCFILE
RCFILE est une méthode de stockage combinée de stockage de lignes et de colonnes; premièrement, il divise les données en blocs par lignes pour garantir que le même enregistrement se trouve sur un bloc, évitant ainsi de devoir lire plusieurs blocs pour lire un enregistrement; deuxièmement, le stockage de colonnes de données de bloc, Propice à la compression des données et au stockage rapide des colonnes;
1.3.1 Créer une table:
créer une table s'il n'existe pas user_info_rc (id bigint, chaîne de nom d'utilisateur, chaîne de mot de passe, chaîne de sexe) champs délimités au format de ligne terminés par ' \ t ' stockés en tant que rcfile;
1.3.2 Importation de données:
insert overwrite table user_info_rc select * from user_info;
1.3.3 Afficher les données du tableau:
sélectionnez * dans user_info_rc;
1.4 Format ORCFILE
Orcfile (Optimized Row Columnar) est un nouveau format de stockage introduit dans la version ruche 0.11, qui est une optimisation du format de stockage RCFile précédent;
On peut voir que chaque fichier Orc est composé d'une ou plusieurs bandes (ligne), chaque bande a une taille de 250 Mo, cette bande est en fait équivalente au concept RowGroup dans le fichier rc précédent, mais la taille est de 4 Mo à> 250 Mo, ce qui devrait améliorer la lecture séquentielle Débit; chaque bande se compose de trois parties, à savoir IndexData, Row Data, Stripe Footer:
(1) Index Data: un index léger, la valeur par défaut est de faire un index toutes les 1W lignes; l'index ici est juste pour enregistrer le décalage de chaque champ d'une ligne dans Row Data;
(2) Données de ligne: stockez des données spécifiques, comme RCfile, prenez d'abord quelques lignes, puis stockez ces lignes par colonnes; la différence avec RCfile est que chaque colonne est codée et divisée en plusieurs flux pour le stockage;
(3) Stripe Footer: stocke le type, la longueur et d'autres informations de chaque flux;
Chaque fichier a un pied de page, qui contient le nombre de lignes, les informations sur le type de données de chaque colonne, etc.; la fin de chaque fichier est un PostScript, qui enregistre le type de compression de tout le fichier et les informations de longueur de FileFooter Lors de la lecture du fichier, il cherchera à lire PostScript à la fin du fichier, à analyser de l'intérieur à la longueur du pied de page de fichier, puis à lire le pied de fichier, à analyser de l'intérieur à chaque information de bande, puis à lire chaque bande, c'est-à-dire à lire de l'arrière vers l'avant;
1.4.1 Créer un tableau de données:
créer une table s'il n'existe pas user_info_orc (id bigint, chaîne de nom d'utilisateur, chaîne de mot de passe, chaîne de sexe) champs délimités au format de ligne terminés par ' \ t ' stockés en tant que orcfile;
1.4.2 Importation de données:
insert overwrite table user_info_orc select * from user_info;
1.4.3 Afficher les données du tableau:
sélectionnez * dans user_info_orc;
1.5 Conclusion
fichier texte: la consommation d'espace de stockage est relativement importante et le texte compressé ne peut pas être divisé et fusionné, l'efficacité de la requête est la plus faible, elle peut être stockée directement et la vitesse de chargement des données est la plus élevée;
fichier de séquence: la consommation d'espace de stockage est la plus importante, les fichiers compressés peuvent être divisés et fusionnés et doivent être chargés via la conversion de fichiers texte;
rcfile: l'espace de stockage est petit, l'efficacité des requêtes est élevée, et il doit être chargé par conversion de fichier texte, et la vitesse de chargement est la plus faible;
orcfile: l'espace de stockage est le plus petit, l'efficacité des requêtes est élevée et il doit être chargé par conversion de fichier texte, et la vitesse de chargement est la plus faible;
2.Hive SerDe
2.1 Qu'est-ce que SerDe
SerDe est "sérialiseur et désérialiseur" (abréviation de sérialiseur et désérialiseur);
Hive utilise SerDe pour lire et écrire des données de ligne de table;
HDFS FILEX -> InputFileFormat -> <clé, valeur> -> Deserializer -> Row Object ;
Objet de ligne -> Sérialiseur -> <clé, valeur> -> OutputFileFormat -> FICHIERS HDFS ;
Remarque: La partie "clé" est ignorée lors de la lecture et est toujours une constante lors de l'écriture; fondamentalement, l'objet ligne est stocké dans la valeur. La sérialisation est le processus de conversion de l'objet en une séquence d'octets; la désérialisation est la restauration de la séquence d'octets de l'objet Processus; la sérialisation des objets est principalement utilisée à deux fins: la persistance de l'objet, c'est-à-dire la conversion de l'objet en une séquence d'octets et son enregistrement dans un fichier; la transmission réseau des données d'objet; en plus des deux points ci-dessus, le rôle de la sérialisation de la ruche comprend également : La désérialisation de la ruche consiste à désérialiser la clé / valeur dans la valeur de chaque colonne de la table de ruche; Hive peut facilement charger les données dans la liste sans avoir besoin de convertir les données, de sorte qu'il peut économiser beaucoup lors du traitement de données massives Du temps
erDe说明hive如果去处理一条记录,包括Serialize/Deserilize两个功能,Serialize把hive使用的java object转换成能写入hdfs的字节序列,或者其他系统能识别的流文件;Deserilize把字符串或者二进制流转换成hive能识别的java object对象;比如:select语句会用到Serialize对象,把hdfs数据解析出来;insert语句会使用Deserilize对象,数据写入hdfs系统,需要把数据序列化;
Hive的一个原则是Hive不拥有HDFS文件格式;用户应该能够使用工具直接读取Hive表的HDFS文件或者使用其他工具直接写那些可以加载外部表的HDFS文件;
2.2 RegExpSerDe的用法
2.2.1 数据准备:
id=123,name=wldy
id=55,name=qtxsn
id=666,name=sjdf
Id=345,name=zs
2.2.2 期望输出格式:
123 wldy
55 qtxsn
666 sjdf
345 zs
2.2.3 创建表:
input.regex(按照输入的正则匹配)
create table test1(id int,name String)row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' with serdeproperties ("input.regex"="id=(.*),name=(.*)") stored as textfile;
2.2.4 加载数据:
load data local inpath '/opt/module/hive/data/regexptest' overwrite into table test1;
2.2.5 查询表数据:
select * from test1;
2.3 JsonSerDe的用法
2.3.1 数据准备:
{"id":1, "create_at":"20190317", "text":"你好", "user_info":{"id":"1","name":"binghe01"}}
{"id":2, "create_at":"20190317", "text":"Hello", "user_info":{"id":"2","name":"binghe02"}}
需要注意的问题:每行必须是一个完整的JSON,一个JSON串不能跨越多行,原因是hadoop是依赖换行符分割文件的;
2.3.2 创建表:
create table jsonMessage(id int,create_at String,text String,user_info map<String,String>)row format SerDe 'org.apache.hive.hcatalog.data.JsonSerDe';
2.3.3 加载数据:
load data local inpath '/opt/module/hive/data/json' overwrite into table jsonMessage;
2.3.4 查询表数据:
select * from jsonMessage;
3.Hive表的修改操作
大多数的表属性可以通过ALTER TABLE语句来进行修改;这种操作会修改元数据,但不会修改数据本身;
3.1 表重命名
语法:Alter table 旧名称 RENAME to 新名称;
Alter table hive_test RENAME to hive_demo;
3.2 修改列信息
语法:Alter table 表名 CHANGE [COLUMN] 列名 新列名 数据类型 [COMMENT 注释文本] [AFTER 字段名称|FIRST];
注意:即使字段名和类型没有改变,用户也需要完全指定旧的字段名,并给出新的字段名和字段类型;COMMENT与AFTER关键字可以省去,COMMENT关键字的所用是为列声明新的注释,AFTER关键字的作用是将当前修改的列防止对应字段名称之后,如果要放在最前面,则使用FIRST关键字代替;
Alter table hive_demo CHANGE id pid bigint;
3.3 增加列
Hive能将新的字段添加到已有字段之后;
语法:Alter table 表名 ADD COLUMNS(列名 字段类型[COMMENT '注释'],......);
Alter table hive_demo ADD columns (sex String);
3.4 删除或替换列
语法:Alter table 表名 REPLACE COLUMNS (列名 字段类型 [COMMENT '注释'],......);
Alter table hive_demo REPLACE columns (name String);
3.5 修改表的存储属性
语法:Alter table 表名 SET FILEFORMAT(TEXTFILE|SEQUENCEFILE|RCFILE|ORCFILE);
Alter table hive_demo SET FILEFORMAT ORCFILE;
3.6 修改表的普通属性
语法:Alter table 表名 SET TBLPROPERTIES('属性名'='属性值');
Alter table hive_demo set tblproperties('comment','best!');
3.7 修改表的SerDe格式
语法:Alter table 表名 SET SERDEPROPERTIES('属性名'='属性值');
3.8 查看表的详细建表语句
语法:Show create table 表名;
Show create table hive_demo;