2017-06-27 6 views
0

ratingsproductsという2つのテーブルを考えてみましょう。私はscript.impalaimpala-shell -f script.impalaを使用して走ったとして保存Impalaを使用した集会的クエリ

SELECT AVG(r.rating), COUNT(p.prod_id) FROM ratings as r, products as p; 

を使用して、いくつかのデータを照会しようとしています。私は、次を得る:

[[email protected]]$ 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 Shell v1.0 (d1bf0d1) built on Sun Apr 28 15:33:52 PDT 2013です。私はそれが古すぎることは分かっていますが、私はそれを変更することはできません。

+2

関連するテーブルの結合条件を指定していないため、クロス結合が発生します。 Impalaでは参加条件の非指定*は許されないと思います。エラーメッセージはクリアです。 –

+0

参加条件の例を教えてください。私はエラーを理解していない – bluesmonk

答えて

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); 

あなたの質問は、とにかく非官能的な結果を返します。たとえば、2つのテーブルの行数の積を返します。

関連する問題