2014-04-24 129 views
1

我在Hive中的兩個表之間嘗試一個簡單的INNER JOIN。我有一個ORDERS表,另一個是LOG表。這是兩者的結構:HiveQL INNER JOIN

訂單:

id_operacion string    
fecha string     
id_usuario string     
id_producto string     
unidades int     
id_bono string     
precio float    
precio_total float     
ip string 

日誌:

host STRING 
identity STRING 
user STRING 
time STRING 
request STRING 
status STRING 
size STRING 
referer STRING 
agent STRING 

不是在順序表中的所有 'IP' 有一個值,其中一些是空。我想獲取值order.id_usuario,order.id_producto,logs.host,logs.agent。在order.ip = log.host的情況下。

我想這個查詢:

SELECT order.id_producto,order.id_usuario,log.host,log.agent 
FROM order JOIN log ON order.ip=log.host; 

我不知道爲什麼,但查詢響應我所有代理日誌的表有,而且不僅與該IP匹配的那些兩個表的地址。

我希望我已經解釋了這個問題。有任何想法嗎?

回答

0

這聽起來像是連接問題。這可能是與空值有關。它也可能是表格中的數據。嘗試這個?

SELECT order.id_producto,order.id_usuario,log.host,log.agent 
FROM order 
JOIN log ON order.ip=log.host 
WHERE order.ip is not null 
+0

謝謝你的回覆。我發現了一種解決問題的方法,如果我通過所有我想要選擇的值進行組合,則它會正確響應。我真的不明白爲什麼我必須這樣做......我認爲加入條件就足夠了。 – JayMash

+0

如果你不得不按所有選擇條件進行分組,它通常意味着你加入的兩張桌子有着不同的關係。即一個訂單有一行,另一個訂單有多個行。 – sarin