2014-10-29 3 views
1

좋은 질문 제목이 맞는지 확실하지 않지만 본문에서 최대한 잘 설명하겠습니다.하이브 : 각 행에 대해 SELECT를 반복하십시오.

내가 http://labrosa.ee.columbia.edu/millionsong/

내 궁극적 인 목표에서 백만 곡 데이터 세트로 작업하고있어 내가 노래를 타고 연도를 기준으로 비슷한 노래를 얻을 수있는 "비슷한 노래"의 라인을 따라 뭔가를 만드는 것입니다, 가입에 하이브가 불평등을 지원하지 않기 때문에 기간 등

내가

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'; 

내 문제로 설정된 하이브 테이블의 데이터를 가지고 온다.

이상적으로 나는 그러나 이것이하실 수 없습니다

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; 

같은 쿼리를 가지고 싶습니다. 나는 현재 내 비슷한 노래 쿼리를 시도하는 가장 좋은 방법에 관해서 난처한 상황에 처해있다. 그것은 SELECT 한 Statment

SELECT title FROM songs WHERE year < 2000 + 5 AND year > 2000 - 5; 

에서 할 것이 가능하지만 하드 코딩 2005 IE 대신 apropriate 값을 복용하는 동안 나는 모든 행에서이 작업을 실행하는 방법을 확실 해요 :

SELECT title FROM songs WHERE year < song.year + 5 AND year > song.year-5; 

사람을 가지고 이런 상황에 빠지거나 시도 할 수있는 전반적인 아이디어가 있습니까?

답변

1

당신은 십자가에 가입하고 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) 
; 

도 자체에 각 노래를 일치 위의 유의하십시오. 원하는 경우 해당 레코드를 제거하려면 다른 제한 사항이 필요합니다.

+0

감사합니다. 나는 절 사이에 대해 몰랐습니다. –

관련 문제