2016-08-11 4 views
0

私はこのサブクエリをHIVEで実行しようとしていますが、HIVEバージョンでサブクエリがサポートされていないというエラーが表示されます。残念ながら、古いバージョンのHIVEを使用しています。その後ハイブIN句を書き直し

select col1,col2 from t1 where col1 in (select x from t2 where y = 0) 

私はこのような参加左半を使用してサブクエリを書き換えてきた、私はどこの条件を与えていない場合

select a.col1,a.col2 
FROM t1 a LEFT SEMI JOIN t2 b on (a.col1 =b.x) 
WHERE b.y = 0 

は、このクエリは細かい実行されているが、そのテーブルBのときを認識しません私はwhere節でb.any列を使用しようとするか、select節でb.any列を使用します。このエラーをスローする -

Error while compiling statement: FAILED: SemanticException [Error 10004]: Line 3:6 Invalid table alias or column reference 'b': (possible column names 

何か助けてください。

+0

これは、同様http://stackoverflow.com/questions/26028767/why-cant-hive-recognize-alias-named-in-select-part –

+0

なぜあなただ​​けの「T2を書き込むことはできませんを参照してください。 "b"の代わりに "。 – Bector

+0

私はそれを試しても動作しません、同じエラーをスローします。 –

答えて

0

t1 a LEFT SEMI JOIN t2 bの代わりに、t1 a LEFT SEMI JOIN (select * from t2 where y = 0) bのようにすることができます。

select a.col1,a.col2 
FROM t1 a LEFT SEMI JOIN (select * from t2 where y = 0) b on (a.col1 =b.x); 

以下の例を参照してください。

Department table: 
+--------------------+----------------------+--+ 
| department.deptid | department.deptname | 
+--------------------+----------------------+--+ 
| D101    | sales    | 
| D102    | finance    | 
| D103    | HR     | 
| D104    | IT     | 
| D105    | staff    | 
+--------------------+----------------------+--+ 

Employee tabe: 
+-----------------+------------------+------------------+--+ 
| employee.empid | employee.salary | employee.deptid | 
+-----------------+------------------+------------------+--+ 
| 1001   | 1000    | D101    | 
| 1002   | 2000    | D101    | 
| 1003   | 3000    | D102    | 
| 1004   | 4000    | D104    | 
| 1005   | 5000    | D104    | 
+-----------------+------------------+------------------+--+ 

hive> SELECT 
dept.deptid, dept.deptname 
FROM 
department dept 
LEFT SEMI JOIN 
(SELECT * FROM employee WHERE salary > 3000) emp 
ON (dept.deptid = emp.deptid); 
+--------------+----------------+--+ 
| dept.deptid | dept.deptname | 
+--------------+----------------+--+ 
| D104   | IT    | 
+--------------+----------------+--+ 
2
select a.col1,a.col2 
FROM t2 b RIGHT OUTER JOIN t1 a on (b.x = a.col1) 
WHERE b.y = 0 

- あなたはLEFTを使用する場合SEMI条件は右サイドテーブルのカラムでは動作しない場合には、登録しよう。スクリプトを上記の状態に変更してください。