使用HIVE SQL实现推荐系统数据补全

简介:

需求


在推荐系统场景中,如果基础行为数据太少,或者过于稀疏,通过推荐算法计算得出的推荐结果很可能达不到要求的数量。

比如,希望针对每个item或user推荐20个item,但是通过计算只得到8个,剩下的12个就需要补全。

策略

数据补全的具体策略是:

  • 补全时机:在挖掘计算结束后,挖掘结果导入HBase(最终web系统从HBase取数据)前,进行数据补全,补全后的数据再导入HBase。(还有另外一个可选时机,在接到请求后再在程序中实现补全,但这样的效率肯定没有直接从HBase中读数的高,所以空间换时间是更为合理的策略);

  • 实现技术:补全过程基于HIVE实现;

  • 补全数据:测试过程使用当前浏览item同分类下近一段时间的浏览量TopN;

  • 测试场景:本文仅针对“看了又看”进行数据补全实验,其它推荐需求类似。

实验过程

1. 首先在Oracle下调试SQL

调试过程涉及两张表:

(1)TEST_TOPN:


该表中每行代表了一个item在某一天的访问量。

(2)TEST_X_AND_X:


该表中每行代表了针对每一个item的看了又看的item及其访问量。

我们的目的,就是将该表补全,针对每个current_item都要有5个看了又看的item。

比如,针对10001号item,需要从it分类下取得top2填补到该表中来。

Oracle中通过以下SQL成功实现该目的:

select * from

(select row_number() over(partition by current_item_category,current_item_id order by source,view_count desc) no,

current_item_id, current_item_category, andx_item_id, source, view_count from

(select current_item_id, current_item_category, andx_item_id, 1 source, view_count

from test_x_and_x

union

select a.current_item_id,a.current_item_category,b.item_id,2,b.view_count

from

(select current_item_id,current_item_category from test_x_and_x

group by current_item_id,current_item_category) a, test_topn b

where a.current_item_category = b.item_category

)) where no<=5


注意:其中的source列用于标识数据来自原始表还是TOPN,所有TOPN的表数据都排在原始表数据之后。

2. 将Oracle中的SQL语句移植到HIVE中

成功移植的HIVE SQL:

select * from

(select rank() over(partition by c.current_item_category,c.current_item_id order by c.source,c.view_count desc) no,

c.current_item_id, c.current_item_category, c.andx_item_id, c.source, c.view_count

from

(select current_item_id,current_item_category,andx_item_id,1 source,view_count

from test_x_and_x

union all

select
a.current_item_id current_item_id,a.current_item_category
current_item_category,b.item_id andx_item_id,2 source,b.view_count
view_count

from

(select current_item_id,current_item_category from test_x_and_x

group by current_item_id,current_item_category) a, test_topn b

where a.current_item_category = b.item_category) c

) d where d.no <= 5;

执行结果和Oracle中完全一致:

移植过程中遇到一些坑,特此记录:

  1. HIVE只支持union all,不支持union;

  2. union all的两张表,不仅要对应字段数据类型相同,字段名(可使用列别名)也必须完全相同;

  3. 每一个嵌套子查询的结果集都必须使用表别名!

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
16天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
1月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
1月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
1月前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
1月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
204 4
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
35 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
86 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
37 0
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
155 1
|
5月前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)