一、Hive的简介:

  Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。

优点:

) 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。

) 避免了去写MapReduce,减少开发人员的学习成本。

) Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。

) Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。

) Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

缺点:

)Hive的HQL表达能力有限
)Hive的效率比较低

二、Hive的架构图

三、Hive的数据类型

基本数据类型:
  Hive数据类型 Java数据类型
  TINYINT    byte
  SMALINT    short
  INT int
  BIGINT    long
  BOOLEAN    boolean
  FLOAT     float
  DOUBLE    double
  STRING string
  TIMESTAMP 时间类型
  BINARY 字节数组
集合
  STRUCT 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。
      struct() 例如struct<street:string, city:string>
  MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素
      map() 例如map<string, int>
  ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[]进行引用。
      Array() 例如array<string>

四、管理表和外部表

  默认创建的表为管理表,有时也被称为内部表。当我们删除一个管理表时,Hive也会删除这个表中数据。管理表不适合和其他工具共享数据。  

  添加关键字external创建的表是外部表,所以Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

#查询表的类型
desc formatted stu;
#修改内部表stu为外部表
alter table stuset tblproperties('EXTERNAL'='TRUE');
#修改外部表stu为内部表
alter table stuset tblproperties('EXTERNAL'='FALSE');
注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!

清空表数据:

 管理表:truncate table stu;

 外部表:alter table stuset tblproperties('EXTERNAL'='FALSE'); 先改成内部表再执行清空:truncate table stu;

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

五、查询常用函数

1,空字段赋值

  NVL( value,default_value)

2,when

  case 字段 when 值 then 替换值 else 替换值 end 同 if(boolean,值,另外值)

3,行转列

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

4,列转行

EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

5,窗口函数

OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化。
CURRENT ROW:当前行
n PRECEDING:往前n行数据
n FOLLOWING:往后n行数据
UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点
LAG(col,n,default_val):往前第n行数据
LEAD(col,n, default_val):往后第n行数据
NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。

6,Rank

RANK() 排序相同时会重复,总数不会变
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算

7,时间

#均只适合yyyy-MM-dd HH:mm:ss格式的时间,当然时分秒可以省略
date_format:格式化时间select date_format('2020-06-04','yyyy-MM');-
date_add: 时间跟天数相加select date_add('2020-06-04',);--
date_sub: 时间跟天数相减select date_sub('2020-06-04',);--
datediff: 两个时间相减select datediff('2020-06-04','2020-05-10');
year: 获取年select year('2020-06-04');
month: 获取月份select month('2020-06-04');
day: 获取日select day('2020-06-04');04 格式转换
regexp_replace: 字段,原格式,替换的格式;select regexp_replace('2020/05/04','/','-');2020-05-04

 

最新文章

  1. 转: 在 Vim 中优雅地查找和替换 (写的很好,排版也是相当的赞)
  2. Pegasos: Primal Estimated sub-GrAdient Solver for SVM
  3. Hadoop作业JVM堆大小设置优化 [转]
  4. Stream,Reader/Writer,Buffered的区别(1)
  5. http://wenku.baidu.com/link?url=UGoPtZviipHzi5SDIlGx6hPFWAHTPLFXcZ7ieD15JMd81DEHqjehvphVMhqELmOK4qXR74dTT9nW8VBoApBc7Kfb1ZWrNF_i24fY1YRHVki
  6. MYSQL学习笔记3--mysql 2PC二阶段协义 与 日志闪回
  7. MySql中的事务嵌套
  8. Hibernate的dynamic-insert和dynamic-update的使用
  9. [转载]Python实现浏览器自动化操作
  10. [bzoj4893]项链分赃
  11. 嵌入式Linux学习路线
  12. 【PAT】反转链表
  13. Android EditText手机号格式化输入XXX-XXXX-XXXX
  14. jmeter获取cookies信息(配置)
  15. D. Too Easy Problems
  16. SpringBatch的流程简介
  17. 风控模型-美国FICO标准
  18. PD 之 连接数据库并导出数据及生成PDM文件
  19. RMySQL数据库编程指南
  20. Python的知识点 plt.plot()函数细节

热门文章

  1. php反序列化(昨天的补充)
  2. ArrrayList底层代码的实现
  3. protus中出现invalid internal memory size ==NULL
  4. java循环map
  5. Python 字符串内置函数(四)
  6. Aizu - 2224
  7. 【Spring】Spring AOP详解(转载)
  8. Word使用技巧——持续更新
  9. 对 getopts 的理解
  10. Mysql面试的技术名词