Hive 中的wordCount详解、split()、explode()、posexplode()、通过起别名的方式接收函数处理字段之后生成的新附加字段
Hive 中的wordCount详解、split()、explode()、posexplode()、通过起别名的方式接收函数处理字段之后生成的新附加字段
因为指定的列分割符是 | 所以数据并不会被分割,而且表中只定义了一个字段
所以每一行数据会作为这个字段的一条记录
然后通过split()将数据按照 ‘ , ’ 进行切分,通过explode()方法将数据扁平化 行→列
posexplode() 在 explode() 基础上再给结果加上下标
因为每一行数据切分的结果,会被当做数组
例如:
0 hello
1 java
2 hello
3 java
4 scala
0 python
1 hbase
2 hadoop
3 hadoop
……
但是 加上下标 之后,就相当于两列了,怎么去接受新的这一列呢??
可以通过别名的方式获取新字段(posexplode()方法生成的下标)
select posexplode(split(words,',')) as (index,word) from words
create table words(
words string
)row format delimited fields terminated by '|';
// 数据
hello,java,hello,java,scala,python
hbase,hadoop,hadoop,hdfs,hive,hive
hbase,hadoop,hadoop,hdfs,hive,hive
//HQL
select word,count(*) from (select explode(split(words,',')) word from words) a group by a.word;
// 结果
hadoop 4
hbase 2
hdfs 2
hello 2
hive 4
java 2
python 1
scala 1