Hive는 join on like 비등가join 연결을 지원하지 않으며 LOCATE()로 대체할 수 있습니다.
일반적으로 우리는 연결을 쓸 때
join...on tb1.a = tb2.b
,like의 글씨를 쓸 때도 있다.MySQL 및 Oracle 모두 지원join...on...like
:SELECT *
FROM table1
LEFT JOIN table2
ON table1.xxx LIKE CONCAT('%',table2.yyy,'%')
그러나 Hive는 like와 같은 비등치 연결을 지원하지 않아서 오류가 발생할 수 있습니다.
해결 방법
법일
인터넷에서 검색하는 방법:
SELECT *
FROM table1
LEFT JOIN table2
ON(TRUE)
WHERE LOCATE(table2.yyy,table1.xxx)
그러나 여기에서 오류 보고가 ON (TRUE) 쓰기를 지원하지 않습니다. 아마도 하이브 버전의 문제일 것입니다. 그래서 시도법 2.
법2
SELECT *
FROM table1
LEFT JOIN table2
ON LOCATE(table2.yyy,table1.xxx)>0
모르는
LOCATE()
함수가 있을 수 있습니다. 간단하게 말하자면 LOCATE(a, b) 기능은 a가 b에 있는 위치를 찾는 것입니다. 찾으면 위치로 돌아가는 것입니다.못 찾으면 0으로 돌아갑니다.예:select LOCATE('20','222000')
결과 출력: 3
select LOCATE('2333','222000')
출력 결과: 0 따라서
LOCATE(table2.yyy,table1.xxx)>0
yy가 xxx에 존재한다는 것을 나타낸다.'yy like x xx%'를 대체할 수 있다.확장 방법
yyy로 시작하는 것만 일치시키려면, 원래 sql은 다음과 같습니다.
SELECT * FROM table1 LEFT JOIN table2
ON table1.xxx like concat(table2.yyy,'%')
Hive는 다음과 같이 재정의할 수 있습니다.
SELECT * FROM table1 LEFT JOIN table2
ON LOCATE(table2.yyy,table1.xxx) = 1
또는 문자열을 잘라내는 방법을 사용할 수 있습니다.
SELECT * FROM table1 LEFT JOIN table2
ON substr(table1.xxx,1,length(table2.yyy)) = table2.yyy
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spark + HWC로 Hive 테이블을 만들고 자동으로 Metadata를 Atlas에 반영합니다.HDP 3.1.x의 경우 Spark + HWC에서 Hive 테이블을 만들고 자동으로 Metadata를 Atlas에 반영하는 방법이 있습니다. 방법: 전제조건: Hive Warehouse Connector (HWC) ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.