hive基础

(使用hive 2.3版本)

hive的资料

Hive 教程(官方Tutorial)
Hive HiveQL基础知识及常用语句总结
Hive2.0函数大全(中文版)
过往记忆的博客

表格的操作

创建表格

创建“课程”表格,用逗号分隔。

create table course(Cno int,Cname string) 
row format delimited fields terminated by ',' 
stored as textfile;
写入数据

1.将本地文件 students.txt 中的内容加载到表 students 中。

load data local inpath '/home/hadoop/tmp/hive_test/students.txt' overwrite into table students;

2.可以把查询结果写入一张表。

INSERT OVERWRITE TABLE students
SELECT user.*
FROM user

3.也可以把查询结果放在hdfs系统中或者本地系统中。

INSERT OVERWRITE DIRECTORY '/user/data/tmp/pv_age_sum'#pv_age_sum是文件夹,查询结果是该文件夹下的一个文件。
    SELECT pv_users.age, count_distinct(pv_users.userid)
    GROUP BY pv_users.age;#这是放在hdfs中的,在"DIRECTORY"前加上"LOCAL",就表示放在本地。

如果是存在本地,打开表示查询结果的那个文件,显示如下:

95001^A李勇^A^A20^ACS
95002^A刘晨^A^A19^AIS
95003^A王敏^A^A22^AMA
95004^A张立^A^A19^AIS
95005^A刘刚^A^A18^AMA

查询

连接

join:只显示左右两表匹配到的数据。(相当于mysql中的join)
left semi join:只显示左表中的部分数据,并且这部分数据是符合匹配条件。(相当于对左表筛选)
left outer join, right outer join, full outer join:这三个就是mysql中左连接、右连接和全连接。
示例:

SELECT u.*
FROM user u LEFT SEMI JOIN students s  ON (s.userid = u.id)
聚合分组(Aggregations)

这和mysql中的分组类似:
如要统计数量,可以对相同的字段pv_users.userid 使用DISTINCT。

INSERT OVERWRITE TABLE pv_gender_agg
SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(*), sum(DISTINCT pv_users.userid)
FROM pv_users
GROUP BY pv_users.gender;

不能对不同的字段pv_users.userid, pv_users.ip使用DISTINCT,以下写法是不允许的
但我测试时发现以下写法是没有报错的,不知道官网上为什么这样写?

INSERT OVERWRITE TABLE pv_gender_agg
SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(DISTINCT pv_users.ip)
FROM pv_users
GROUP BY pv_users.gender;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值