シナリオは次のとおりです。次のようにhqlを呼び出すと、u1のエイリアスが見つからないことがわかります。
_Hive> select user as u1, url as u2 from rank_test where u1 != "";
FAILED: SemanticException [Error 10004]: Line 1:50 Invalid table alias or column reference 'u1': (possible column names are: user, url)
_
この問題は、count(*) as cnt
を使用しようとする場合と同じです。 where句でエイリアスを使用する方法について誰かにヒントを教えてもらえますか?どうもありがとう!
_Hive> select user, count(*) as cnt from rank_test where cnt >= 2 group by user;
FAILED: ParseException line 1:58 missing EOF at 'where' near 'user'
_
where
句はselect
句の前に評価されるため、where句で選択したエイリアスを参照することはできません。
ただし、派生テーブルからエイリアスを参照することはできます。
select * from (
select user as u1, url as u2 from rank_test
) t1 where u1 <> "";
select * from (
select user, count(*) as cnt from rank_test group by user
) t1 where cnt >= 2;
補足:最後のクエリを作成するより効率的な方法は
select user, count(*) as cnt from rank_test group by user
having count(*) >= 2
私の記憶が正しければ、having
のエイリアスを参照できます。つまり、having cnt >= 2
バックティックシンボル ``を使用して、Hiveのselectステートメントでエイリアスを使用することができました。
SELECT COL_01 AS `Column_A`;
上記のソリューションはHiveバージョン1.2.1で機能しました。