Hive综合应用案例 — 用户搜索日志分析

1478 篇文章

已下架不支持订阅

第1关:2018年点击量最高的10个网站域名

任务描述
本关任务:分析2018年点击量最高的10个网站域名。

编程要求
在右侧编辑器补充代码,分析出2018年点击量最高的10个网站域名。

创建数据库:mydb

创建原始表:db_search

字段名 类型 注释
id string 用户编号
key string 搜索关键词
ranking int 该URL在返回结果中的排名
or_der int 点击顺序
url string 域名
time string 时间
部分数据如下:

数据切分方式:空格

数据所在位置:/root/data.txt

测试说明
平台会对你编写的代码进行测试:

预期输出:

bbs.union.daqi.com 1822
www.qihoo.com 1714
ent.sina.com.cn 937
bbs.phoenixtv.com 857
yule.sohu.com 827
club.chinaren.com 827
click.cpc.sogou.com 807
blog.sohu.com 737
news.sina.com.cn 649
club.yule.sohu.com 6

已下架不支持订阅

### Hive 用户搜索日志的数据处理与分析 #### 创建数据库 在使用 Hive 处理用户搜索日志之前,需要先创建一个数据库来存储相关的表和数据。可以通过以下 SQL 命令完成此操作: ```sql CREATE DATABASE IF NOT EXISTS search_logs; USE search_logs; ``` 上述命令会创建名为 `search_logs` 的数据库并切换到该数据库下工作[^2]。 --- #### 定义表结构 为了存储用户搜索日志,需定义合适的表结构。假设每条日志记录包含以下字段: - `log_id`: 日志唯一标识符 (BIGINT 类型) - `user_id`: 用户 ID (STRING 类型) - `query`: 搜索关键词 (STRING 类型) - `timestamp`: 时间戳 (TIMESTAMP 类型) 可以使用以下 HQL 语句创建表: ```sql CREATE TABLE IF NOT EXISTS user_search_logs ( log_id BIGINT, user_id STRING, query STRING, timestamp TIMESTAMP ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE; ``` 这里指定了分隔符为 `\t` 并将文件存储为文本格式。如果数据源是其他格式(如 JSON 或 Parquet),可以根据实际需求调整存储方式[^3]。 --- #### 导入数据 Hive 支持多种方法导入外部数据。一种常见的方式是从 HDFS 文件系统加载数据至指定表中。例如,假设有已上传至 HDFS 路径 `/data/search_logs/` 下的日志文件,则可通过以下命令实现数据导入: ```sql LOAD DATA INPATH '/data/search_logs/' INTO TABLE user_search_logs; ``` 另一种更灵活的方法是利用 Sqoop 工具从关系型数据库(如 MySQL)提取数据并将其写入 Hive 表中[^1]。 --- #### 执行 SQL 查询 一旦完成了数据准备阶段,就可以针对这些数据执行各种复杂的查询操作以满足业务需求。下面列举几个典型场景及其对应的 SQL 实现方案: ##### 场景一:统计每天的总搜索次数 ```sql SELECT DATE(timestamp) AS date, COUNT(*) AS total_searches FROM user_search_logs GROUP BY DATE(timestamp); ``` ##### 场景二:找出最热门的前十个搜索词 ```sql SELECT query, COUNT(*) AS frequency FROM user_search_logs GROUP BY query ORDER BY frequency DESC LIMIT 10; ``` ##### 场景三:按时间段划分用户的活跃度分布情况 ```sql WITH time_buckets AS ( SELECT CASE WHEN HOUR(timestamp) BETWEEN 0 AND 5 THEN 'Night' WHEN HOUR(timestamp) BETWEEN 6 AND 11 THEN 'Morning' WHEN HOUR(timestamp) BETWEEN 12 AND 17 THEN 'Afternoon' ELSE 'Evening' END AS period, COUNT(*) AS count_per_period FROM user_search_logs GROUP BY period ) SELECT * FROM time_buckets ORDER BY count_per_period DESC; ``` 以上示例展示了如何通过简单的聚合函数以及窗口函数挖掘隐藏于原始数据背后的洞察力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ssaty.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值