Hive 配置单元:对每行重复选择

Hive 配置单元:对每行重复选择,hive,Hive,我不完全确定这是否是一个好的问题标题,但我会尽我所能在正文中解释 我正在处理百万首歌曲数据集,来自 我的最终目标是按照“相似歌曲”的思路创作一些东西,在这首歌中,我会根据年份、持续时间等选择一首歌曲,然后得到相似的歌曲 我将配置单元表中的数据设置为 CREATE TABLE IF NOT EXISTS songs(genre String, artist String, danceability Double, duration Double, loudness Double, similarA

我不完全确定这是否是一个好的问题标题,但我会尽我所能在正文中解释

我正在处理百万首歌曲数据集,来自

我的最终目标是按照“相似歌曲”的思路创作一些东西,在这首歌中,我会根据年份、持续时间等选择一首歌曲,然后得到相似的歌曲

我将配置单元表中的数据设置为

CREATE TABLE IF NOT EXISTS songs(genre String, artist String, danceability Double, duration Double, loudness Double, similarArtists String, hotness Double, title String) PARTITIONED BY(year String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
我的问题是因为Hive不支持JOIN中的不等式

理想情况下,我希望有一个类似

SELECT songs.artist, songs.title, t2.title FROM songs JOIN songs as t2 ON songs.year > t2.year -5 AND songs.year < t2.year +5;
从歌曲中选择songs.artist、songs.title、t2.title将歌曲加入为songs.year>t2.year-5和songs.year
然而,目前这是不可能的。我目前很难找到最好的方法来尝试我类似的歌曲查询。有可能在选择的状态下完成

SELECT title FROM songs WHERE year < 2000 + 5 AND year > 2000 - 5;
从年份<2000+5和年份>2000-5的歌曲中选择标题;
但我不确定如何在每一行上运行此操作,同时采用适当的值,而不是硬编码2005,即:

SELECT title FROM songs WHERE year < song.year + 5 AND year > song.year-5;
从年份song.year-5的歌曲中选择标题;

有没有人遇到过这样的情况,或者有什么我可以尝试的总体想法?

您可以在where子句中执行交叉连接和子集:

select songs.artist, songs.title, t2.title
from songs
cross join songs as t2
where songs.year between (t2.year - 5) and (t2.year + 5)
;

请记住,上面的内容也会使每首歌与自己相匹配。如果需要,您需要另一个限制来删除这些记录。

非常感谢,我不知道BEVERY子句。