11.3.4 Hive QL使用实例
下面我们通过两个例子对Hive QL的使用方法进行介绍,从中可以看到它与传统SQL语句的异同点。
1.电影评分
首先创建表,并且使用tab空格定义文本格式:
CREATE TABLE u_data(
userid INT,
movieid INT,
rating INT,
unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY'\t'
STORED AS TEXTFILE;
然后下载数据文本文件并解压,代码如下:
wget http://www.grouplens.org/system/files/ml-data.tar__0.gz
tar xvzf ml-data.tar__0.gz
将文件加载到表中,代码如下:
LOAD DATA LOCAL INPATH'ml-data/u.data'
OVERWRITE INTO TABLE u_data;
Count the number of rows in table u_data:
SELECT COUNT(*)FROM u_data;//由于版本问题,如果此处出现错误,你可能需要使用COUNT(1)替换
COUNT(*)
下面可以基于该表进行一些复杂的数据分析操作,此处我们使用Python语言,首先创建Python脚本,如代码清单11-4所示。
代码清单11-4 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)])
使用如下mapper脚本调用weekday_mapper.py脚本进行操作。
CREATE TABLE u_data_new(
userid INT,
movieid INT,
rating INT,
weekday INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY'\t';
add FILE 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;
2.Apache网络日志数据(Weblog)
可以定制Apache网络日志数据格式,不过一般管理者都使用默认的格式。对于默认设置的Apache Weblog可以使用以下命令创建表:
add jar../build/contrib/hive_contrib.jar;
CREATE TABLE apachelog(
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING)
ROW FORMAT SERDE'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES(
"input.regex"="([^])([^])([^])(-|\[[^\]]\])([^\"]|\"[^\"]\")
(-|[0-9])(-|[0-9])(?:([^\"]|\"[^\"]\")([^\"]|\"[^\"]\"))?",
"output.format.string"="%1$s%2$s%3$s%4$s%5$s%6$s%7$s%8$s%9$s"
)
STORED AS TEXTFILE;
更多内容可以查看http://issues.apache.org/jira/browse/HIVE-662。