Hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张表,并提供类SQL查询功能。express
优势:数组
1) 操做接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。 2) 避免了去写MapReduce,减小开发人员的学习成本。 3) Hive的执行延迟比较高,所以Hive经常使用于数据分析,对实时性要求不高的场合。 4) Hive优点在于处理大数据,对于处理小数据没有优点,由于Hive的执行延迟比较高。 5) Hive支持用户自定义函数,用户能够根据本身的需求来实现本身的函数。
缺点:架构
1)Hive的HQL表达能力有限 2)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个元素能够经过数组名[1]进行引用。
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')为固定写法,区分大小写!
清空表数据:oop
管理表:truncate table stu;学习
外部表:alter table stuset tblproperties('EXTERNAL'='FALSE'); 先改为内部表再执行清空:truncate table stu;大数据
场景:天天将收集到的网站日志按期流入HDFS文本文件。在外部表(原始日志表)的基础上作大量的统计分析,用到的中间表、结果表使用内部表存储,数据经过SELECT+INSERT进入内部表。网站
1,空字段赋值spa
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');2020-06 date_add: 时间跟天数相加select date_add('2020-06-04',5);2020-06-09 date_sub: 时间跟天数相减select date_sub('2020-06-04',5);2020-05-30 datediff: 两个时间相减select datediff('2020-06-04','2020-05-10');25 year: 获取年select year('2020-06-04');2020 month: 获取月份select month('2020-06-04');04 day: 获取日select day('2020-06-04');04格式转换regexp_replace: 字段,原格式,替换的格式;select regexp_replace('2020/05/04','/','-');2020-05-04