1

私は2つのテーブルを持っています

表1:

id
1
2
3

表 2:

id date
1   x1
4   x2
1   x3
3   x4
3   x5
1   x6
3   x5
6   x6
6   x5
3   x6

テーブル 1 に存在するテーブル 2 の各 ID の数が必要です。

結果

id  count
1   3
2   0
3   4

私はこのクエリを使用していますが、エラーが発生しています:

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2
 GROUP BY tab2.id
 WHERE tab2.id IN (select id from <mytable1>)
 ;

エラーは次のとおりです。

「di_device_id」の近くの「WHERE」に EOF がありません

4

2 に答える 2

3

考えられる問題は 2 つあります。WHERE 句のサブクエリは、Hive 0.13 以降でのみサポートされています。そのようなバージョンを使用している場合、問題は単に WHERE と GROUP BY が間違っていることです:

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2
 WHERE tab2.id IN (select id from <mytable1>)
 GROUP BY tab2.id
 ;

古いバージョンの Hive を使用している場合は、JOIN を使用する必要があります。

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2 INNER JOIN <mytable1> tab1 ON (tab2.id = tab1.id)
 GROUP BY tab2.id
 ;
于 2015-08-18T16:12:39.990 に答える
3

あなたには2つの問題があります:-

  1. Wheregroup by の前に来ます。SQL 構文ではhaving、グループ化後にフィルタリングするために使用します!
  2. Hive は、Where 句ですべての種類のネストされたクエリをサポートしているわけではありません。ここを参照してください:ハイブサブクエリ

ただし、サブクエリのタイプは問題ありません。これを試して:-

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2
 WHERE tab2.id IN (select id from <mytable1>)
 GROUP BY tab2.id;

それはあなたが意味したこととまったく同じことをします。

編集:@MattinBitの回答を確認しました。答えを複製するつもりはありませんでした。彼の答えはより完全です!

于 2015-08-18T16:26:45.333 に答える