大数据技术之Hive (二)

阅读本篇文章大概需要15分钟

 

继上一篇大数据技术之Hive (一),今天更新第二篇,本篇主要分享Hive的DDL语句、DML操作。

 

DDL 语句

 

创建数据库

 

创建一个数据库,数据库在 HDFS 上的默认存储路径是:/user/hive/warehouse/*.db

 

在这里我还是要推荐下我自己建的大数据学习交流qq裙: 957205962, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴

hive (default)>create database db_hive;

 

避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法)

 

hive (default)>create database 

                        if not exists db_hive;

 

创建一个数据库,指定数据库在 HDFS 上存放的位置

hive (default)> create database db_hive2 

                           location '/db_hive2.db';

 

修改数据库

 

用户可以使用 ALTER DATABASE 命令为某个数据库的 DBPROPERTIES 设置键-值对 属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数 据库名和数据库所在的目录位置。

hive (default)> alter database db_hive 

set dbproperties('createtime'='20170830');

 

在 mysql 中查看修改结果

hive> desc database extended db_hive;

 

查询数据库

 

显示数据库

hive> show databases;

 

过滤显示查询的数据库
hive> show databases like 'db_hive*';

 

查看数据库详情

 

显示数据库信息

hive> desc database db_hive;

 

显示数据库详细信息,extended
hive> desc database extended db_hive;

 

切换当前数据库

hive (default)> use db_hive;

 

删除数据库

 

删除空数据库
hive>drop database db_hive2;

 

如果删除的数据库不存在,最好采用 if exists 判断数据库是否存在

hive> drop database if exists db_hive2;

 

如果数据库不为空,可以采用 cascade 命令,强制删除

hive> drop database db_hive cascade;

 

创建表

 

建表语法

 

 

字段解释说明:

 

1、CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出 异常;用户可以用 IFNOTEXISTS 选项来忽略这个异常。

 

2、EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际 数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路 径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的 时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

 

3、COMMENT 为表和列添加注释。


4、PARTITIONED BY 创建分区表


5、CLUSTERED BY 创建分桶表


6、SORTED BY 分区排序


7、ROW FORMAT DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char][MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

 

用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户 还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe确定表的具体的列的数据。

 

8、STOREDAS 指定存储文件类型

 

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

 

10、LIKE 允许用户复制现有的表结构,但是不复制数据。

 

管理表

 

默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive 会(或多 或少地)控制着数据的生命周期。Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定义的目录的子目录下。当 我 们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。

 

普通创建表

 

根据查询结果创建表(查询的结果会添加到新创建的表中)

 

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

create table if not exists student4 like student;

 

查询表的类型
hive (default)> desc formatted student2;

 

外部表

 

因为表是外部表,所有 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删掉。

 

管理表和外部表的使用场景:

每天将收集到的网站日志定期流入 HDFS 文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过 SELECT+INSERT进入内部表。

 

?(例子):

分别创建部门和员工外部表,并向表中导入数据

 

创建部门表

 

创建员工表

 

 

查看创建的表

hive (default)> show tables;

 

向外部表中导入数据 导入数据

在这里我还是要推荐下我自己建的大数据学习交流qq裙: 957205962, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴

查询结果

hive (default)> select * from emp;

hive (default)> select * from dept;

 

查看表格式化数据

hive (default)> desc formatted dept;

 

分区表

 

分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区 所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的 数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查 询效率会提高很多。

 

分区表基本操作

 

引入分区表(需要根据日期对日志进行管理)

 

创建分区表语法

 

加载数据到分区表中

 

查询分区表中数据

 

单分区查询

hive (default)> select * from dept_partition where month='201809';

 

多分区联合查询

 

增加分区,创建单个分区

hive (default)> alter table dept_partition 

                           add partition(month='201810') ;

 

同时创建多个分区

 

hive (default)> alter table dept_partition add 

                        partition(month='201811'),

                        partition(month='201812');

 

删除分区 ,删除单个分区

hive (default)> alter table dept_partition 

                           drop partition (month='201810');

 

同时删除多个分区
hive (default)> alter table dept_partition drop 

                            partition (month='201811'), 

                            partition (month='201812);

 

查看分区表有多少分区
hive>show partitions dept_partition;

 

查看分区表结构
hive>desc formatted dept_partition;

 

分区表注意事项

 

创建二级分区表

 

正常的加载数据

加载数据到二级分区表中

 

查询分区数据

hive (default)> select * from dept_partition2 

 where month='201809' and day='13';

 

把数据直接上传到分区目录上,让分区表和数据产生关联的两种方式

方式一:上传数据后修复

 

 

查询数据(查询不到刚上传的数据)
hive (default)> select * from dept_partition2 

 where month='201812' and day='12';

 

执行修复命令

hive>msck repair table dept_partition2;

 

再次查询数据

hive (default)> select * from dept_partition2 

where month='201812' and day='12';

 

方式二:上传数据后添加分区

 

 

执行添加分区
hive (default)> alter table dept_partition2 add partition(month='201812', day='11');

 

查询数据

hive (default)> select * from dept_partition2 where month='201812' and day='11';

 

方式三:上传数据后 load 数据到分区

在这里我还是要推荐下我自己建的大数据学习交流qq裙: 957205962, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴

修改表

 

重命名表

 

 

增加/修改/替换列信息

 

 

注:ADD 是代表新增一字段,字段位置在所有列后面(partition 列前),REPLACE 则是 表示替换表中所有字段。

 

实操案例

 

删除表

hive (default)> drop table dept_partition;

 

DML 数据操作

 

数据导入

向表中装载数据(Load)

 

 

1、load data:表示加载数据
2、local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表 

3、inpath:表示加载数据的路径
4、into table:表示加载到哪张表
5、student:表示具体的表 

6、overwrite:表示覆盖表中已有数据,否则表示追加 

7、partition:表示上传到指定分区

 

实操案例

 

 

通过查询语句向表中插入数据(Insert)

 

 

查询语句中创建表并加载数据(As Select)

根据查询结果创建表(查询的结果会添加到新创建的表中)

create table if not exists student3

as select id, name from student;

 

创建表时通过 Location 指定加载数据路径

 

Import 数据到指定 Hive 表中

 

 

数据导出

 

Insert 导出

 

其他命令导出

 

还可以用Sqoop 导出,后面专门分享一篇关于Sqoop 导出的文章

 

清除表中数据(Truncate)

 

注意:Truncate 只能删除管理表,不能删除外部表中数据

hive (default)> truncate table student;

 

吐槽一下后台的编辑器,真是超级难用,真是有点恶心到我了,下次先在有道云笔记准备好再复制过来看看效果怎么样,还是支持Markdown的编辑器比较好用,还有一些小细节,SQL的显示问题,使我不得不将一部分SQL先在Sublime中写好然后以截图的方式放进来,而且图片还加了水印,以后的图片尽量去掉水印吧,挺影响视觉上的体验,包括字体、排版,以后的文章中都会优化,提升阅读体验。

 

在这里我还是要推荐下我自己建的大数据学习交流qq裙: 957205962, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴
 
 

 

这是Hive的第二部分,之后会更新Hive的查询、常用函数、压缩、存储、优化,作为Hive的一个系列。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值