[HADOOP] 두 테이블을 비교하고 HIVE와 다른 행을 반환하는 방법
HADOOP두 테이블을 비교하고 HIVE와 다른 행을 반환하는 방법
약 180 개의 열과 100 개의 레코드가있는 테이블이 있다고 가정하겠습니다. 이 테이블은 임시 테이블에 백업되고 원래 테이블은 제거됩니다. 이 마이그레이션 후 (변경) 동일한 파이프 라인을 생성하는 파이프 라인에서 실행됩니다. 내가 백업 한 테이블을 새로운 하나의 adn 행 (레코드)과 비교하여 3 번째 테이블 (_result 테이블)로 옮길 수있는 차이점을 알려주고 싶습니다.
INSERT OVERWRITE TABLE
zakj_customers.customers_detail_result
SELECT
acct_id, IF (a.title != b.title, 1, 0) title, IF (a.fname != b.fname, 1, 0) fname, IF (a.dob != b.dob, 1, 0) dob, IF (a.cr_date != b.cr_date, 1, 0) cr_date
FROM
zakj_customers.customers_detail a
LEFT OUTER JOIN
zakj_customers.customers_detail_backup b
ON
(a.acct_id = b.acct_id)
ORDER BY
title DESC,fname DESC,dob DESC,cr_date DESC
HAVING
title > 0 AND fname > 0 AND dob > 0 AND cr_date > 0
;
그래서이 쿼리는 잘못된 것입니다. 저는 SQL에 그다지 익숙하지 않습니다. 구문 오류가 발생합니다. 따라서이 형식으로 제공되는 티켓과 함께 올바르게 조합 할 수 없습니다.이 형식은 분명히 잘못되었습니다.
누구든지 이것이 가능한 방법을 볼 수 있습니까?
건배
해결법
-
==============================
1.다음 경우에 대신 "사례"를 사용해야합니다.
다음 경우에 대신 "사례"를 사용해야합니다.
Case When a.title <> b.title then 1 Else 0 End title
나는 where 조건에 대한 표현을 작성하지는 않을 것입니다.
INSERT Into zakj_customers.customers_detail_result SELECT acct_id, a.title, a.fname, dob, a.cr_date FROM zakj_customers.customers_detail a LEFT OUTER JOIN zakj_customers.customers_detail_backup b ON (a.acct_id = b.acct_id) Where b.acct_id is null or a.title <> b.title or a.fname <> b.fname or a.cr_date <> b.cr_date;
새 레코드를 필터링하려면 acct_id가 null입니다.
(레코드를 삽입 할 때는 주문이 필요하지 않습니다.)
from https://stackoverflow.com/questions/26379409/how-to-compare-two-tables-and-return-rows-with-difference-with-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 왜 하이브에서 텍스트 파일 형식에 비해 마루가 느려 집니까? (0) | 2019.08.06 |
---|---|
[HADOOP] 돼지의 group_concat? (0) | 2019.08.06 |
[HADOOP] Hive의 JSON 문자열에서 선택한 값을 추출하는 방법 (0) | 2019.08.06 |
[HADOOP] 년 월 일 파티션 열 목록에서 최신 / 최근 파티션을 추출하는 방법 (0) | 2019.08.06 |
[HADOOP] java Mapreduce를 사용하여 JSON 처리하기 (0) | 2019.08.06 |