作。
删除函数
注销用户定义函数的格式如下:
hive> drop temporary function function_na
6.2 运行案例
6.2.1 学生数据分析之人数统计
某高校开设了体育选修课,可供选修的科目有羽毛球、篮球、足球、体操、游泳、乒乓球、跆拳道、网球、排球等。现需要统计学校学生报名各个科目的人数,从而分配相应的教学老师。学生包名数据在文件中。现在我们通过Hive的MapReduce程序来进行计算。计算过程如下:
首先我们需要在Hive中创建数据表,表名称为phy_opt_course,数据表结构如下: stname(string) stID(int) class(string) opt_cour(string) 进入Hive,通过CREATE语法来进行创建,并指定字段分隔符为“\\t”,换行符为“\\n”,并以“TEXTFILE”的形式进行存储。
hive> CREATE TABLE phy_opt_course
> (stname STRING,stID INT,class STRING,opt_cour STRING) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY '\\t' > LINES TERMINATED BY '\\n' > STORED AS TEXTFILE;
接下来将中的数据导入到Hive的phy_opt_course表中
hive> load data local inpath '/root/' into table phy_opt_course; 查看表中数据。
hive> select * from phy_opt_course;
通过Group By语法来统计各个科目的数据。并将统计的数据导入到phy_opt_count中。
在导入之前,我们需要创建一个phy_opt_count的数据表结构,并指定字段分隔符为“\\t”,换行符为“\\n”,并以“TEXTFILE”的形式进行存储。
hive> CREATE TABLE phy_opt_count > (opt_cour STRING,cour_count Int) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY '\\t' > LINES TERMINATED BY '\\n' > STORED AS TEXTFILE; 导入数据。
hive> INSERT OVERWRITE TABLE phy_opt_count > SELECT ,COUNT(DISTINCT > FROM phy_opt_course > GROUP BY ; 通过SELECT语句查询数据
hive> SELECT * FROM phy_opt_count;
6.2.2 管理HDFS中的网络日志数据
某企业的WEB服务器中有一些日志访问数据,现需要使用Hive数据仓库统计日志数据中的IP地址所对应的国家,并且需要将访问日期和访问时间进行合并。
首先我们需要在Hive中创建数据表,表名称为weblog_entries,数据表结构如下: md5(STRING) url(STRING) request_date request_time (STRING) ip(STRING) (STRING) 进入Hive,通过CREATE语法来进行创建,使用关键字EXTERNAL定义该表为外部表,在HDFS文件系统中的位置为/data/hive/weblog/,并指定字段分隔符为“\\t”,换行符为“\\n”,
hive> DROP TABLE IF EXISTS weblog_entries; OK
Time taken: seconds
hive> CREATE EXTERNAL TABLE weblog_entries ( > md5 STRING, > url STRING,
> request_date STRING, > request_time STRING, > ip STRING > )
> ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' > LINES TERMINATED BY '\\n' > LOCATION '/data/hive/weblog/'; OK
Time taken: seconds
接下来将中的数据导入到Hive的weblog_entries表中
hive> load data local inpath '/root/tmp/' into table weblog_entries; Loading data to table
Table stats: [numFiles=1, numRows=0, totalSize=251130, rawDataSize=0] OK
Time taken: seconds 查看表中数据。
hive> select * from weblog_entries;
下面是样例输出,这里只包含两行实例,完整输出一共包含3000行。
1c13c719fbfd87f49522f189413c6ba / 2012-05-10 21:17:32 / 2012-05-10 21:12:04 导入成功后,需要把weblog_entries中分开的request_date和request_time字段进行合并,在命令行输出单独的一列,并以一个下划线“_”进行分割。
hive > SELECT concat_ws('_', request_date, request_time)
> FROM weblog_entries;
下面是样例输出,这里只包含两行实例,完整输出一共包含3000行。 2012-05-10_21:33:26 2012-05-10_21:13:10
下面将日志数据中的IP字段与IP对应的国家进行简单的内链接。首先需要创建一个ip_to_country表格,里面包含
hive> CREATE TABLE ip_to_country ( > ip STRING, > country string > )
> ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' > LINES TERMINATED BY '\\n'
> LOCATION '/data/hive/ip_to_country/'; OK
Time taken: seconds 导入数据
hive> load data local inpath '/root/tmp/' into table ip_to_country; Loading data to table
Table stats: [numFiles=2, numRows=0, totalSize=326858, rawDataSize=0] OK
Time taken: seconds 查看表中数据。
hive> select * from ip_to_country;
下面是样例输出,这里只包含两行实例,完整输出一共包含3000行。 United States Morocco
添加如下JOIN内联创建语法:
hive > SELECT wle.*, FROM weblog_entries wle
> JOIN ip_to_country itc ON = ;
下面是样例输出,这里只包含两行实例,完整输出一共包含3000行。 11402ba8f780f7fbfb108f213449e1b9 / 2012-05-10 21:19:05 United States 7ffb8f8ed136c5fe3a5dd6eedc32eae7 / 2012-05-10 21:17:05 Korea, Republic of SELECT wle.*会告诉Hive输出weblog_entries表中记录的每一列,其中wle是表名的一个简写别名,itc是ip_to_country的简写。此外,JOIN操作等会告诉Hive每一行网络日志记录的IP地址,通过查找表ip_to_country确定其对应的国家。换言之,包含这两张表的IP地址字段是连接键。
接下来使用Hive动态地为网络日志查询结果创建Hive表。 通过创建一张新表来定义新的网络日志数据库的三个字段,分别是request_date,、request_time以及url。此外,定义了一个名为url_length的新字段。
hive> CREATE TABLE weblog_entries_with_url_length AS
> SELECT url, request_date, request_time, length(url) as url_length > FROM weblog_entries;
Query ID = root_20_4284cbf2-5eb7-4662-bae2-73d4998fbf07 Total jobs = 1
Launching Job 1 out of 1
Tez session was closed. Reopening... Session re-established.
Status: Running (Executing on YARN cluster with App id application__0005) ---------------------------------------------------------------------------