官网示例
官网地址:
https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-ApacheWeblogData
下载数据
wget http://files.grouplens.org/datasets/movielens/ml-100k.zip
我们下载好数据
安装unzip
yum install -y unzip
解压数据
创建库
创建表
CREATE TABLE u_data (
userid INT,
movieid INT,
rating INT,
unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 't'
STORED AS TEXTFILE;
加载数据
LOAD DATA LOCAL INPATH '/data/ml-100k/u.data' OVERWRITE INTO TABLE u_data;
查看下数据
select * from u_data limit 10;
编写python脚本,创建文件weekday_mapper.py,编写下面代码
import sys
import datetime
for line in sys.stdin:
line = line.strip()
userid, movieid, rating, unixtime = line.split('t')
weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
print 't'.join([userid, movieid, rating, str(weekday)])
创建结果表
CREATE TABLE u_data_new (
userid INT,
movieid INT,
rating INT,
weekday INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 't';
添加文件
add FILE /data/weekday_mapper.py;
插入数据
INSERT OVERWRITE TABLE u_data_new
SELECT
TRANSFORM (userid, movieid, rating, unixtime)
USING 'python weekday_mapper.py'
AS (userid, movieid, rating, weekday)
FROM u_data;
查询结果
SELECT weekday, COUNT(*)
FROM u_data_new
GROUP BY weekday;
就可以看到结果了,周一评论量12254,后面依次类推得到信息
再看下常见的时间格式
Hive的自带的时间函数,利用show functions;
查看下面两个函数:
unix_timestamp(转换为时间戳)unix_timestamp,以格林威治时间为基准
from_unixtime (转换为标准时间格式)
这些时间准确表达可以分析网站后台日志数据,统计用户停留时间等。比如查看两条时间的时间差,先转换为统一unix时间戳,再相减就能得到
测试
select unix_timestamp("2015-08-31 00:04:37");
如果使用下面
select unix_timestamp("20150831000437");
select unix_timestamp("20150831 000437");
运行之后null,无法识别格式
指定格式进行转换,
select unix_timestamp("20150831000437","yyyyMMddHHmmss");
select unix_timestamp("20150831000437","yyyyMMdd HHmmss");这样也不可以
将Unix时间戳转换为标准时间格式
select from_unixtime(1440950677);
这次就可以
select from_unixtime(1440950677,"yyyyMMdd HHmmss");