그 결과에 레코드가없는하이브 SQL 여러 왼쪽 외부 조인 쿼리는 내가 7 개 테이블을 조인 아래에 내가 쿼리를 사용하고이 작업을 수행하기 위해, 하나 개의 큰 조인 된 테이블에 조인 된 데이터를 삽입하려고
INSERT OVERWRITE TABLE databaseName.joinTab PARTITION (tran_date)
SELECT <180 cols across all 7 tables>
FROM databaseName.table1 tab1
LEFT OUTER JOIN databaseName.table2 tab2 ON (tab1.id = tab2.id and
tab1.tran_date='20171030' and tab2.tran_date='20171030')
LEFT OUTER JOIN databaseName.table3 tab3 ON (tab1.id = tab3.id and
tab1.tran_date='20171030' and tab3.tran_date='20171030')
LEFT OUTER JOIN databaseName.table4 tab4 ON (tab1.id = tab4.id and
tab1.tran_date='20171030' and tab4.tran_date='20171030')
LEFT OUTER JOIN databaseName.table5 tab5 ON (tab1.id = tab5.id and
tab1.tran_date='20171030' and tab5.tran_date='20171030')
LEFT OUTER JOIN databaseName.table6 tab6 ON (tab1.id = tab6.id and
tab1.tran_date='20171030' and tab6.tran_date='20171030')
LEFT OUTER JOIN databaseName.table7 tab7 ON (tab1.id = tab7.id and
tab1.tran_date='20171030' and tab7.tran_date='20171030')
WHERE (tab1.tran_date='20171030');
tran_date는 이러한 모든 테이블의 파티션 열입니다. 왜냐하면 내가 ON 절에있는 조건뿐만 아니라 where 절을 가지고있는 이유는 tez 작업이 시작된 것이 table1에 대한 전체 테이블 스캔을 수행한다는 것을 알았 기 때문입니다. .
그래서 여기 내 문제는 내가 tran_date의 표에서 카운트 (*)를 할 경우 = 20171030 다음 난 결과로 11845917를 얻을 수있다
내가 (joinTab를) 새로운 조인 된 테이블에서 카운트 (*)를 할 경우 그 동일한 파티션에 대해 tran_date = 20171030 나는 매우 큰 차이가있는 결과 97609 만 얻었습니다. 왼쪽 외부 조인을 사용하기 때문에 테이블 1의 모든 데이터를 조인 테이블로 이동하고 널 (null)을 채워야한다고 생각했던 것입니다. 다른 테이블에. table1 데이터가로드 될 때 joinTab에서 tran_date를 언급해야합니다.
여기에 보이지 않는 것이 있습니까? 당신의 도움에 대한
감사
댄