2014-04-24 128 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