SQL motorları arasındaki davranışları karşılaştırıyorum.HIVE'da tam dış katılma neden birleşim alanları eksik olduğunda garip sonuç verir?
Oracle
CREATE TABLE sql_test_a
(
ID VARCHAR2(4000 BYTE),
FIRST_NAME VARCHAR2(200 BYTE),
LAST_NAME VARCHAR2(200 BYTE)
);
CREATE TABLE sql_test_b
(
NUM VARCHAR2(4000 BYTE),
FIRST_NAME VARCHAR2(200 BYTE),
LAST_NAME VARCHAR2(200 BYTE)
);
INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('1', 'John', 'Snow');
INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('2', 'Mike', 'Tyson');
INSERT INTO sql_test_b (NUM, FIRST_NAME, LAST_NAME) VALUES ('20', 'Mike', 'Tyson');
Ben aşağıdaki yürütmek, bu bana beklenen sonuçları verir: Oracle tam dış birleşimler için bir SQL motoru beklediğiniz davranış vardır. Ortaya çıkan tablo, NUM
alanı için NULL
içeren satırlardan biri ile birlikte iki satır içerir, çünkü tablo sql_test_b
tablosunda hiç bir john karı yoktur. Aynı şeyi denemek olsaydı
kovanında Ancak, tam dış iki satır içeren bir tablo sonuçları katılmak http://sqltest.net/
Hive:
SELECT A.FIRST_NAME, A.LAST_NAME, A.ID, B.NUM
FROM
SQL_TEST_A A
FULL OUTER JOIN
SQL_TEST_B B
ON
A.FIRST_NAME = B.FIRST_NAME
AND
A.LAST_NAME = B.LAST_NAME;
Burada sql komut test edebilirsiniz . "John Snow" satırı olması gereken satır, FIRST_NAME, LAST_NAME ve NUM alanları için NULL
içeriyor. 1
, ID
için doldurulur, ancak bu kadar.
HIVE'da neden bu garip davranışlar var? Bu bir hata mı? Ya da bir şey özlüyorum ... çünkü Oracle 11g bunu daha iyi hallediyor. Teşekkürler.
mysql tam dış katılımı desteklemiyor, sonra doğru sonucu nasıl alıyorsunuz? – Farooque
Sanırım, Oracle, MySQL değil. Teşekkürler @Farooque !! – Candic3
Bu davranış HIVE normal mi? – Candic3