2017-10-23 12 views
0

他の3つのテーブルをマージしてテーブルを上書きしようとしています。以下のように:ハイブ - テーブルに新しい列を追加すると、SemanticException [エラー10002]:無効な列参照

  1. 私は表3
  2. の列の値に基づいて新しい列を追加しますtable2の
  3. からちょうど2つの列がかかりますTABLE1
  4. からすべての列がかかります

3つのテーブル:テーブル1、テーブル2と表3は、これは私がちょうどSELECTトンで、これまでのところ、私はINSERT OVERWRITE TABLE final_tableせずにそれをしようとしています(しようとしているクエリでキーIDとして

を持っていますOテーブルに挿入される結果)

--INSERT OVERWRITE TABLE final_table 
select 
     t1.*, 
     t2.field1, 
     t2.field2, 
     CASE WHEN (t3.indicator = 'F' OR 
        t3.indicator = 'O' 
        ) THEN 'Y' ELSE 'N' END AS new_field3 
from 
table1 t1 
LEFT OUTER JOIN table2 t2 
ON (t1.id = t2.id) 
LEFT OUTER JOIN table3 t3 
ON (t1.id = t3.id); 

を参照してください。しかしCASE WHENに、私は次のエラーを取得しています:私は間違って

Error while compiling statement: FAILED: SemanticException [Error 10002]: Line 7:17 Invalid column reference 'new_field3'

何をしているのですか?

答えて

1

私は、セマンティックエラーが表示されますが、としてクエリを書いてみません:変更のほとんどは化粧品です

select t1.*, t2.field1, t2.field2, 
     (case when t3.indicator in ('F', 'O') then 'Y' else 'N' 
     end) as new_field3 
from table1 t1 left outer join 
    table2 t2 
    on t1.id = t2.id left outer join 
    table3 t3 
    on t1.id = t2.id; -- ??? 

OR式のリストの代わりにINを使用することをお勧めします。これは、書き込みと読み取りが容易なためです。

さらに重要なことに、table3joinの条件には、table3は含まれません。

私の知る限り、これらのどちらもセマンティック例外を生成しません。しかし、2番目の方法は、クエリが実行していると思われることを実行していないことを意味します。

+0

ありがとうございました。私が編集を完了する前に、「テーブル3の結合条件にはtable3は含まれていません」と指摘しました。 –

関連する問題