我不知道该怎么处理这个问题:
这是我的数据:
Table1: Table2:
BRAND PRODUCT SOLD
Sony Sony ABCD 1233
Apple Sony adv 1233
Google Sony aaaa 1233
IBM Apple 123 1233
etc. Apple 345 1233
IBM 13123 1233
是否可以过滤查询,我有一个表,其中代表品牌和总solds?我的想法是:
Select table1.brand, sum(table2.sold) from table1
join table2
on (table1.brand LIKE '%table2.product%')
group by table.1.brand
那是我的主意,但我总是出错
最大的问题是like操作符还是有其他解决方案?
2条答案
按热度按时间mspsb9vt1#
我看到了两个问题:首先,Hive中的连接只在平等条件下工作,而like在那里不起作用。
https://cwiki.apache.org/confluence/display/hive/languagemanual+joins
配置单元中仅支持相等联接、外部联接和左半联接。配置单元不支持非相等条件的联接条件,因为很难将此类条件表示为map/reduce作业。
相反,这需要加入where子句。
其次,我还发现like语句本身有问题:“%table2.product%”被解释为字符串“%table2.product%”。此外,即使这样做是为了达到预期的效果,它也会试图寻找品牌内部的table2.product,而你似乎想从另一个Angular 来寻找它。要获得您想要的评估,您需要在table1.brand的内容中添加通配符;为此,您需要将通配符连接到表达式中。
这样,like将计算字符串“%sony%”、“%apple%”……等,而不是“%table2.product%”。
你想要的是brandon bell的问题,我把它合并到这个答案中:
bnlyeluc2#
你应该能够做到这一点,没有一个连接。请参见以下查询:
这是回报
其中我的输入文件如下:
以及