■ はじめに
https://dk521123.hatenablog.com/entry/2021/06/18/184713
で、CASE文を使った際に、 構文エラーになった (ただ単に「end」が抜けていた) ので hive の CASE文について、整理しておく。
目次
【1】CASE文 - CASE statements 【2】構文 1)単純CASE式(simple case) 2)検索CASE式(searched case) 【3】IN句 - IN clauses 【4】サンプル 例1:簡単な例 例2:クリーニング処理
【1】CASE文 - CASE statements
* 条件によって違う結果を返す => SQL の CASE文と同じ (SQLについては、以下の関連記事を参照のこと)
SQL ~ CASE文 ~
https://dk521123.hatenablog.com/entry/2010/08/03/195704
【2】構文
* 以下の2パターンある ~~~~~~~~~~ 1)単純CASE式(simple case) 2)検索CASE式(searched case) ~~~~~~~~~~ => SQL の CASE文と同じ * 以下「Conditional Functions」にも記載。
1)単純CASE式(simple case)
CASE item WHEN condition1 THEN result1 [WHEN ...] [ELSE resultN] END
2)検索CASE式(searched case)
CASE WHEN condition1 THEN result1 [WHEN ...] [ELSE resultN] END
【3】IN句 - IN clauses
* Hive 0.13 からサポート => 詳細は、以下の公式ドキュメントを参照。
https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#LanguageManualUDF-LogicalOperators
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries#LanguageManualSubQueries-SubqueriesintheWHEREClause
* CASE文内で使用できる。 => 実際の使用例は、以下「【4】サンプル」を参照。
【4】サンプル
例1:簡単な例
hive> SELECT CASE WHEN UPPER('japan') IN ('JAPAN', 'JP', 'JA') THEN 'Japan' ELSE 'Other' end; OK Japan
例2:クリーニング処理
https://dk521123.hatenablog.com/entry/2020/07/06/232350
-- より抜粋 -- id に 'NULL', 'N/A', '' だった場合、NULLを設定 SELECT CASE WHEN UPPER(TRIM(id)) IN ('NULL', 'N/A', '') THEN NULL ELSE TRIM(id) END AS id FROM person;
関連記事
Hive / HiveQL ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2019/11/25/235219
Hive / HiveQL ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/25/231235
Hive / HiveQL ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/06/02/183823
Hive / HiveQL ~ HiveQL関数編 ~
https://dk521123.hatenablog.com/entry/2020/03/10/224640
Hive / HiveQL ~ HiveQL関数・regexp_replace編 ~
https://dk521123.hatenablog.com/entry/2021/06/18/184713
Hive / HiveQL ~ 日時操作編 ~
https://dk521123.hatenablog.com/entry/2021/02/11/233633
Apache Hive ~ HiveQL / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2020/03/04/225943
Hive / HiveQL ~ データをクリーニングする ~
https://dk521123.hatenablog.com/entry/2020/07/06/232350
SQL ~ CASE文 ~
https://dk521123.hatenablog.com/entry/2010/08/03/195704