Hive知识点(持续更新中)

6 篇文章 0 订阅

集群安装详细步骤见我的博客:https://blog.csdn.net/qq_25948717/article/details/81054411

Hive是基于Hadoop的一个数据仓库处理工具,是一种数据库技术,用于查询和管理存储在分布式环境下的大数据集,可以定义数据库和表来分析结构化数据,适合处理相对静态的海量的数据集。可以将结构化的数据映射为一张数据库表,提供简单的SQL的查询功能,将SQL语句转化为MapReduce任务提交到Hadoop集群运行,十分适合数据仓库的统计分析。

Hive并不提供实时的查询和基于行级的数据更新操作,Hive在加载数据的过程中不会对数据进行任何修改,只是将数据

移动到Hive设定(hive-site.xml)的HDFS目录中,将HDFS中的数据变成关系型数据库的逻辑结构,在Hive中创建的数据库其实是假的,所以需要一个映射关系数据(即元数据(metastore)),因此,Hive不支持对数据的改写和添加。Hive的最佳使用场合就是大数据集的批处理操作。

目前Hive将metastore数据存储在RDBMS数据库中,HIve有三种模式可以访问数据库中的metastore内容:

(1)单用户本地模式:使用简单基于内存的数据库derby

  (2)   多用户本地模式:使用本地的关系数据库Mysql,提供多用户并发访问

(3) 远程服务器模式:使用单独的机器部署数据库服务器,配置远程访问权限

Hive的体系结构:

Hive引擎:解释器(将脚本解释成Java代码),编译器(将Java代码编译提交到Hadoop中),优化器(提交过程中优化Java代码-->

                  mapreduce作业)

HIve syhell运行在Hadoop集群之上,是Hive提供的命令行接口,Hive shell会把HQL查询转化为一系列的MapReduce任务并行进行处理,命令以“;”结束。

注意:HIve并不是存储数据,而是管理在HDFS上的数据,通过HIve表导入数据只是简单地将数据移动或者复制hive表所在的HDFS目录中。Hive不是数据库,也不是服务。可以理解为Hadoop的客户端,安装在任何机器下都行。

HIve管理数据的方式:Managed Table(内部表)、External Table(外部表)、Partition(分区)、Bucket(桶)。

删除外部表时只会删除外部表对应的元数据,其对应的表数据不会删除,而删除内部表都会删除,所以可以看出内部表是由Hivve进行管理的。

在HIve中,表的每一个分区对应表目录下的一个子目录,所分区的数据都是存储在对应的子目录中。

桶是对应列的数据的划分。

=====================================================================

数据库的操作:

CREATE DATABASE yexin; 或者 CREATE SCHEMA yexin;                 --------------------创建数据库

DROP DATABASE IF EXISTS yexin;或者 DROP SCHEMA yexin--------------------------删除数据库

  1. --创建数据库

  2. create database if not exists sopdm

  3. comment ‘this is test database’

  4. with dbproperties(‘creator’=’gxw’,’date’=’2014-11-12’) --数据库键值对属性信息

  5. location ‘/my/preferred/directory’;

  6. --查看数据库的描述信息和文件目录位置路径信息

  7. describe database sopdm;

  8. --查看数据库的描述信息和文件目录位置路径信息(加上数据库键值对的属性信息)

  9. describe database extended sopdm

  10. --删除数据库

  11. drop database if exists sopdm;

  12. --级联删除数据库(当数据库还有表时,级联删除表后在删除数据库),默认是restrict

  13. drop database if exists sopdm cascade;

  14. --修改数据库

  15. --只能修改数据库的键值对属性值。数据库名和数据库所在的目录位置不能修改

  16. alter database sopdm set dmproperties(‘edited-by’=’gaoxianwei’);

  17. --创建表

  18. --其中tblproperties作用:按照键值对的格式为表增加额外的文档说明,也可用来表示数据库连接的必要的元数据信息

  19. --hive会自动增加二个表属性:last_modified_by(最后修改表的用户名),last_modified_time(最后一次修改的时间)

  20. create table if not exists sopdm.test1(name string comment ‘姓名’,salary float comment ‘薪水’)

  21. comment ‘这是一个测试的表’

  22. tblproperties(‘creator’=’me’,’created_at’=’2014-11-13 09:50:33’)

  23. location ‘/user/hive/warehouse/sopdm.db/test1’

  24. --查看和列举表的tblproperties属性信息

  25. show tblproperties table_name;

  26. --使用like在创建表的时候,拷贝表模式(而无需拷贝数据)

  27. create table if not exists sopdm.test2 like sopdm.test1;

  28. --查看表的详细结构信息(也可以显示表是管理表,还是外部表。还有分区信息)

  29. describe extended sopdm.test1;

  30. --使用formatted信息更多些,可读性更强

  31. describe formatted sopdm.test1;

  32. --创建外部表

  33. --删除表时,表的元数据会被删除掉,但是数据不会被删除

  34. --如果数据被多个工具(如pig等)共享,可以创建外部表

  35. create external table if not exists sopdm.test1(

  36. name string comment ‘姓名’,

  37. salary float comment ‘薪水’)

  38. comment ‘这是一个测试的表’

  39. tblproperties(‘creator’=’me’,’created_at’=’2014-11-13 09:50:33’)

  40. location ‘/user/hive/warehouse/sopdm.db/test1’

  41. --分区表

  42. create table if not exists sopdm.test1(

  43. name string comment ‘姓名’,

  44. salary float comment ‘薪水’)

  45. comment ‘这是一个测试的表’

  46. partitioned by(country string,state string)

  47. STORED AS rcfile

  48. tblproperties(‘creator’=’me’,’created_at’=’2014-11-13 09:50:33’)

  49. location ‘/user/hive/warehouse/sopdm.db/test1’

  50. --查看表中存在的所有分区

  51. show partitions table_name;

  52. --查看表中特定分区

  53. show partitions table_name partition(country=’US’);

  54. --可以在表载入数据的时候创建分区

  55. load data local inpath ‘${env:HOME/employees}’

  56. into table employees

  57. partition(country=’US’,state=’CA’);

  58. --删除表

  59. drop table if exists table_name;

  60. --修改表-表重命名

  61. alter table old_table_name rename to new_table_name;

  62. --增加分区

  63. alter table table_name add if not exists partition(year=2011,month=1,day=1)

  64. location ‘/logs/2011/01/01’;

  65. --修改分区存储路径

  66. alter table table_name partition(year=2011,month=1,day=2)

  67. set location ‘/logs/2011/01/02’;

  68. --删除某个分区

  69. alter table table_name drop if exists partition(year=2011,month=1,day=2);

  70. --修改列信息

  71. alter table table_name

  72. change column old_name new_name int

  73. comment ‘this is comment’

  74. after severity; --字段移到severity字段之后(移动到第一个位置,使用first关键字)

  75. --增加列

  76. alter table table_name add columns(app_name string comment ‘application name’);

  77. --删除或者替换列

  78. alter table table_name replace columns(hms int comment ‘hhh’);

  79. --修改表属性

  80. alter table table_name set tblproperties(‘notes’=’this is a notes’);

  81. --修改存储属性

  82. alter table table_name partition(year=2011,month=1,day=1) set fileformat sequencefile;

  83. --指定新的SerDe,并指定SerDe属性

  84. alter table table_name

  85. set serde “com.example.JSONSerDe”

  86. with serdeproperties(‘prop1’=‘value1’, ‘prop2’=‘value2’);

  87. --增加执行“钩子”——当表中存储的文在hive之外被修改了,就会触发钩子的执行

  88. alter table table_name touch partition(year=2012,month=1,day=1);

  89. --将分区内的文件打成hadoop压缩包文件,只会降低文件系统中的文件数,减轻NameNode的压力,而不会减少任何的存储空间

  90. --使用unarchive替换archive起到反向操作

  91. alter table table_name archive partition(year=2012,month=1,day=1);

  92. --防止分区被删除和被查询(使用enable替代disable可以起到反向的操作目的)

  93. alter table table_name partition(year=2012,month=1,day=1) disable no_drop;

  94. alter table table_name partition(year=2012,month=1,day=1) disable offline;

  95. --向管理表中装载数据

  96. -- inpath为一个目录,而且这个路径下不可以包含任何文件夹

  97. load data local inpath ‘${env:HOME}/table_name’

  98. overwrite into table table_name

  99. partition(country=’US’);

  100. --通过查询语句向表中插入数据

  101. --overwrite是覆盖,into是追加

  102. insert overwrite table table_name

  103. partition(country=’US’)

  104. select * from table_name2 tn where tn.cnty=’US’

  105. --高效方式-查询语句插入多个分区

  106. from table_name2 tn

  107. insert overwrite table table_name

  108. partition(country=’US’,state=’OR’)

  109. select * where tn.cnty=’US’ and tn.st=’OR’

  110. insert overwrite table table_name

  111. partition(country=’US’,state=’CA’)

  112. select * where tn.cnty=’US’ and tn.st=’CA’

  113. --动态插入分区

  114. --hive根据select语句最后2列确定分区字段country和state的值(根据位置)

  115. insert overwrite table table_name

  116. partition(country,state)

  117. select …,se.cnty,se.st

  118. from employees se;

  119. --动态和静态分区结合

  120. --country为静态分区,state为动态分区(静态分区必须在动态分区之前)

  121. insert overwrite table table_name

  122. partition(country=‘US’,state)

  123. select …,se.cnty,se.st

  124. from employees se

  125. where se.cnty=’US’;

  126. --单个查询语句中创建表并加载数据

  127. create table table_name1

  128. as select name,salary,address from table_name2 where state=’CA’;

  129. --导出数据——拷贝文件

  130. --如果数据文件恰好是用户需要的格式,那么只需要简单的拷贝文件或文件夹就可以。

  131. hadoop fs –cp source_path target_path

  132. --导出数据

  133. insert overwrite local directory ‘/tmp/employees’

  134. select name,salary,address from employees se where se.state=’CA’

  135. --导出数据到多个输出文件夹

  136. from employees se

  137. insert overwrite local directory ‘/tmp/or_employees’

  138. select * se where se.cty=’US’ and se.st=’OR’

  139. insert overwrite local directory ‘/tmp/ca_employees’

  140. select * se where se.cty=’US’ and se.st=’CA’

创建表:

create table if not exists yexin.yexin(name string comment 'name',salary float comment 'money') comment 'this is test table';

网页中可以看到数据库表的成功:

利用文件导入数据到表:

txt文件

上传到hdfs的/hive/input,再导入:

LOAD DATA INPATH '/hive/input/hive.txt' OVERWRITE INTO TABLE yexin;

如果是本文件就是:LOAD DATA LOCAL INPATH '/hive/input/hive.txt' OVERWRITE INTO TABLE yexin;

注意:导入之后/hive/input/下就没有hive.txt文件了,因为上传到/hive/warehouse/yexin.db/了:

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值