Hive 库操作与表操作教程

223次阅读
没有评论

一、Hive库操作

1.创建数据库

Hive中创建学校数据库。

[hadoop@master ~]$ hive

hive > create database school;

Hive

语法:CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name

  [COMMENT database_comment]      //关于数据块的描述

  [LOCATION hdfs_path]          //指定数据库在HDFS上的存储位置

  [WITH DBPROPERTIES (property_name=property_value, …)]; 

2.修改数据库并显示数据库详细信息

hive> alter database school set dbproperties(‘creater’=’H3C’);

hive> desc database extended school;

添加自定义属性,创建者为H3C。

Hive

hive> alter database school set owner user root;

hive> desc database extended school;

修改数据库的所有者为root。

Hive

语法:desc database [extended] database_name;

3.删除数据库并显示全部数据库

hive> drop database school;

hive> show databases;

语法:show <database_name>

drop database <database_name>

Hive

其他操作,如切换数据库,语法:use database_name。删除包含表的数据库,语法:drop database if exists database_name cascade。查看正在使用哪个库,语法:select current_database()。其他操作可参考官方说明文档。

二、Hive表操作

1.创建表

在school数据库中建立teacher表,具有工号、姓名、学科,授课年级四项属性。创建之前需要使用use语言切换操作数据库。

hive> create database school;

hive> use school;

hive> create table teacher(

    > num int,

    > name string,

    > email map<string,int>,

    > class array<string>);

Hive

语法: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]  —数据存储的文件夹地址信息

Hive默认创建的普通表被称为管理表或内部表。表的数据由Hive进行统一管理,默认存储于数据仓库目录中。可通过Hive的配置文件hive-site.xml对进行修改。可以通过Hadoop web UI进行查看创建结果。

Hive

除了默认的内部表之外,Hive也可以使用关键词“EXTERNAL”创建外部表。外部表的数据可以存储于数据仓库以外的位置,既可以手动修改存储于HDFS上的地址。

分区表:目的是为了避免暴力扫描,一个分区就是HDFS上的一个独立文件夹;Hive的分区就是HDFS的目录分割;注意的是,创建表时指定的表的列中不应该包含分区列,分区列需要使用关键词partitioned by在后面单独指定。

hive> create table teacher(

    > num int,

    > name string,

    > email map<string,int>,

    > class array<string>)

> partitioned by (age int)

   > row format delimited fields terminated by “,”

分桶表:可以将表或者分区进一步细化成桶,是对数据进行更细粒度的划分,以便获得更高的查询效率。桶在数据存储上与分居不同的是,一个分区会存储于一个目录数据文件存储于该目录中,而一个桶将存储为一个文件,数据内容存储于文件中。注意的是,创建桶表时指定桶列需要提前创建,使用关键词clustered by在后面单独指定,并指定分为多少个桶(buckets)。

hive> create table teacher(

    > num int,

    > name string,

    > email map<string,int>,

    > class array<string>)

  > clustered by (num) into 4 buckets

    > row format delimited fields terminated by “,”

2.查看所有表与详细信息

hive> show tables;

hive> desc teacher;

hive> desc formatted teacher;

语法:desc <table_name>

Hive
Hive

也可以复制一个已经存在的表。

hive> create table teacher2 like teacher;

语法:create <table_name> like <table_copy_name>;

3.修改表

修改表名。

hive> alter table teacher rename to new_teacher;

语法:alter table <table_name> rename to <new_table_name>

修改表的列名,数据类型,列注释和列所在的位置,FIRST将列放在第一列,AFTER col_name将列放在col_name后面一列。下面的语句将列名num修改为number,数据类型为更改为string并添加注释,最后将这一列放在name后面。

hive> alter table new_teacher change num number string comment ‘the num of teacher, change datatype to string ‘ after name;

语法:alter table <table_name> change [cloumn] <col_old_name> <col_new_name> column_type [conmment col_conmment] [first|after column_name];

增加/更新列,add columns允许用户在当前列的末尾,分区列之前添加新的列,replace columns允许用户更新列,更新的过程是先删除当前的列,然后在加入新的列。

hive> alter table new_teacher add columns(age int);

语法:alter table <table_name> add|replace columns (<col_name> data_type [conmment col_comment], …);

Hive

4.删除表退出

删除表。

hive> drop table teacher2;

语法:drop table <table_name>

清空表。

hive> truncate table new_teacher;

语法:truncate table <table_name>

hive> exit;

Hive
Hive

到点睡觉了
版权声明:本站原创文章,由 到点睡觉了2022-01-08发表,共计3261字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)