使用Impala的Conjuctive查询

时间:2017-06-27 13:36:02

标签: sql cloudera impala

考虑两个表,ratingsproducts,并且有一些列。我正在尝试使用

查询一些数据
SELECT AVG(r.rating), COUNT(p.prod_id) FROM ratings as r, products as p;

我保存为script.impala并使用impala-shell -f script.impala保存。我得到以下内容:

[user@localhost]$ impala-shell -f script.impala *mumble* Query: select AVG(r.rating), COUNT(p.prod_id) FROM ratings as r, products as p ERROR: NotImplementedException: Join between 'r' and 'p' requires at least one conjunctive equality predicate between the two tables Could not execute command: select AVG(r.rating), COUNT(p.prod_id) FROM ratings as r, products as p

我在Impala docs中找不到关于此类查询的任何信息。这个查询的正确语法是什么?两者都完全适用于单独的陈述。

Impala版本为Impala Shell v1.0 (d1bf0d1) built on Sun Apr 28 15:33:52 PDT 2013。我知道它已经超级老了,但我无法改变它。

1 个答案:

答案 0 :(得分:0)

从不FROM子句中使用逗号。 始终使用正确的,明确的JOIN语法。在您的情况下,您有一个查询。怎么样?

select r.avg_rating), p.cnt_products
from (select avg(r.rating) as avg_rating from ratings r) cross join
     (select count(*) as cnt_products from products p);

无论如何,您的查询将会返回非感性结果。例如,它将返回两个表中行数的乘积。