Hive基本DDL操作

1、数据库的DDL操作

(1)创建数据库

数据库在HDFS上的默认存储路径是/user/hive/warehouse/数据库名.db

  • hive > create database db_hive;
  • 两者等价
  • hive > create database if not exists db_hive;(用if not exists判断是否已存在该数据库)

(2)显示所有数据库

  hive> show databases;

(3)查询数据库(模糊查询)

hive> show databases like 'db_hive*';

(4)查看数据库详情

  • hive> desc database db_hive;
  • 两者等价:
  • hive> desc database extended db_hive;

(5)切换当前数据库

hive > use db_hive;

(6)删除数据库

  • #删除为空的数据库
  •       hive> drop database db_hive;
  • #如果删除的数据库不存在,最好采用if exists 判断数据库是否存在
  •       hive> drop database if exists db_hive;
  • #如果数据库中有表存在,这里需要使用cascade强制删除数据库
  •       hive> drop database if exists db_hive cascade;

2、表DDL操作

(1)建表语法

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]  row format delimited fields terminated by “分隔符”
[STORED AS file_format] 
[LOCATION hdfs_path]

create table:创建一个指定名字的表

EXTERNAL:创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),指定表的数据保存在哪里

COMMENT:为表和列添加注释

PARTITIONED BY :创建分区表

CLUSTERED BY :创建分桶表

SORTED BY: 按照字段排序(一般不常用)

ROW FORMAT :指定每一行中字段的分隔符:如row format delimited fields terminated by ‘\t’

STORED AS :指定存储文件类型,

  • 常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、ORCFILE(列式存储格式文件)如果文件数据是纯文本,可以使用STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE

LOCATION 指定表在HDFS上的存储位置。

(2)创建内部表(3种)

直接建表:使用标准的建表语句;

     如create table stu(id int, name string);

     可以通过insert into向hive表当中插入数据,但是不建议工作当中这么做;因为每个insert语句转换成mr后会生成一个文件

     如:insert into stu(id,name) values(1,"zhangsan");

查询建表法 :通过AS 查询语句完成建表:将子查询的结果存入新表里 ;

     如:create table if not exists myhive.stu1 as select id, name from stu;

like建表法 :根据已经存在的表结构创建表

     如:create table if not exists myhive.stu2 like stu;

(3)查询表的类型(若是外部表,则显示为EXTERNAL)

       hive > desc formatted myhive.stu;

(4)创建外部表

  • 外部表因为是指定其他的hdfs路径的数据加载到表当中来;
  • 删除hive表的时候,数据仍然存放在hdfs当中,不会删掉 ,只是删除元数据信息;
  • 创建外部表的时候需要加上external关键字  ;

(5)向表中加载数据

实际工作当中使用load的方式来加载数据到内部表或者外部表 ;

第一种:数据在linux本地磁盘

  • load data local inpath '..本地linux路径..' into table tablename;
  • 或者
  • load data local inpath '..本地linux路径..' overwrite table tablename;

如:从本地文件系统加载数据到teacher表当中去:

load data local inpath '/install/hivedatas/teacher.csv' into table myhive.teacher;

第二种:数据在hdfs上

  • load data inpath '.hdfs路径..' into table tablename;
  • 或者:
  • load data inpath '.hdfs路径..' overwrite table tablename;

从hdfs上面加载文件到teacher表里面去 :

load data inpath '/hdfsload/hivedatas' overwrite into table myhive.teacher;

(6)内部表与外部表的互相转换(set tblproperties的值)

内部表转换为外部表

  • #将stu内部表改为外部表
  • alter table stu set tblproperties('EXTERNAL'='TRUE');

外部表转换为内部表

  • #把teacher外部表改为内部表
  • alter table teacher set tblproperties('EXTERNAL'='FALSE');

(7)内部表与外部表的区别

建表语法的区别 :

  • 外部表在创建的时候需要加上external关键字 ;

删除表之后的区别 :

  • 内部表删除后,表的元数据和真实数据都被删除了;

  • 外部表删除后,仅仅只是把该表的元数据删除了,真实数据还在,后期还是可以恢复出来。

使用时机的区别:

  • 仅仅个人使用,其他人不使用的时候就可以创建内部表,
  • 大家都要要使用,就创建外部表 。

位置的不同:

  • 外部表都是用在数据仓库的ODS层 ;
  • 内部表都是用在数据仓库的DW层 。

(8)修改表的名称

           alter table  old_table_name  rename to  new_table_name;

(9)增加列

          alter table stu4 add columns(address string);

(10)修改列

          alter table stu4 change column address address_id int;

(11)hive的分区表

在hive当中也是支持“分而治之”的思想,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了 。即把数据按特定的形式分目录存储在不同的文件夹下。

在文件系统上建立文件夹,把表的数据放在不同文件夹下面,加快查询速度。

  1. 创建分区表语法

         hive (myhive)> create table score(s_id string, c_id string, s_score int) partitioned by (month string) row format delimited fields terminated by '\t';

    2.创建一个表带多个分区 (分年、月、日三个区)

         hive (myhive)> create table score2 (s_id string,c_id string, s_score int) partitioned by (year string, month string, day string) row format delimited fields terminated by '\t';

     3.加载数据到分区表当中去

         hive (myhive)>load data local inpath '/install/hivedatas/score.csv' into table score partition (month='201806');

     4.加载数据到多分区表当中去

         hive (myhive)> load data local inpath '/kkb/install/hivedatas/score.csv' into table score2 partition(year='2018', month='06', day='01');

      5.查看分区

         hive (myhive)> show  partitions  score;

      6.添加一个分区

         hive (myhive)> alter table score add partition(month='201805');

       7.同时添加多个分区

         hive (myhive)> alter table score add partition(month='201804') partition(month = '201803');

       8.删除分区

         hive (myhive)> alter table score drop partition(month = '201806');

发布了31 篇原创文章 · 获赞 20 · 访问量 3082

猜你喜欢

转载自blog.csdn.net/fengge18306/article/details/105190983