一、hive的定义:
-
Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的
-
Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目录/文件,达到了元数据与数据存储分离的目的
-
Hive的内容是读多写少,不支持对数据的改写和删除
-
Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:
– 列分隔符 空格,‘,’‘\t’
– 行分隔符‘\n’
– 读取文件数据的方法
- 注:如果数据中包含了‘\n’,就会出现串行的现象。
二、hive命令
-
修改字段名字:
ALTER TABLE 表名 CHANGE 旧字段 新字段 类型;
-
建表语句:
-
加载数据: LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
解释: local:可选,表示从本地文件系统中加载,而非hdfs overwrite:可选,先删除原来数据,然后再加载。
partition:这里是指将inpath中的所有数据加载到那个分区,并不会判 断待加载的数据中每一条记录属于哪个分区。
三、需要注意的函数用法
- repexp_replace 替换,官网说用另个两个\,其实要用四个\\\\才行
- 行转列的函数是:explode()
- 列转行的函数是:concat_ws(',',collect_set(column)),其中
- 1.collect_set()可以去重
- 2.collect_list 不去重
- 3.column的数据类型要求是string
四、用hive来个单词统计
select count(a.word) as cnt,a.wordfrom ( select explode(split(regexp_replace(sentence,'[,\\\\"]',''),'')) as word from article) a group by wordorder by cntlimit 100;
注:函数说明
- explode():行转列
- split():字段切割
- regexp_replace():替换,用于过滤特殊符号、标点符号