2015-01-12 2 views
1

나는 두 개의 하이브 테이블 (t1과 t2)을 비교하고 싶습니다. 두 번째 테이블에는 첫 번째 테이블에없는 다섯 개의 추가 열이 있습니다. 5 개의 분리 된 필드가 아닌 다른 두 테이블은 동일해야합니다. 이것을 확인하기 위해 쿼리를 작성하려고합니다. 다음은 내가 지금까지 가지고있는 것입니다 :비슷한 하이브 테이블 비교

SELECT * FROM t1 
UNION ALL 
select * from t2 
GROUP BY some_value 
HAVING count(*) == 2 

테이블이 동일하면 0 레코드를 반환해야합니다. 그러나 두 번째 테이블에는 5 개의 추가 필드가 있으므로이를 반영하기 위해 두 번째 select 문을 변경해야합니다.

SELECT * FROM t1 
UNION ALL 
select field1, field2, field3,...,fieldn from t2 
GROUP BY some_value 
HAVING count(*) == 2 

나는 주위를 둘러 보았다하고 난 더 select * EXCEPT 구문이없는 알고 있지만,이 쿼리를 할 수있는 방법은 명시 적으로하지 않고있다 :이 약 60 열 이름은 내가 정말이처럼 쓰기 싫어하다 최종 결과에 포함시키려는 각 열의 이름을 지정 하시겠습니까?

+0

첫 번째 쿼리의 레코드 중 일부가 count == 2가 아니겠습니까? 표가 동일하면 각 행이 복제됩니다. UNION ALL은 중복을 제거하지 않습니다. – Michael

+0

네, 맞습니다. 결과에는 원래 행 수와 동일한 개수가 있어야합니다. – nLee

답변

0

적용 할 로직에 UNION DISTINCT을 사용해야합니다.

그러나 각 select_statement에 의해 반환되는 열의 수와 이름은 동일해야합니다. 그렇지 않으면 스키마 오류가 발생합니다.

0

당신은 (모든 행과 열을 모두 비교) 하이브 테이블의 이러한 비교를 처리하는이 파이썬 프로그램에서 봐 수 있으며, 웹 페이지에 나타날 수있는 차이를 보여 것 님의 https://github.com/bolcom/hive_compared_bq

을 5 개의 추가 필드를 건너 뛰면 "--ignore-columns"옵션을 사용할 수 있습니다.