【Hive】Hive / HiveQL ~ CASE文 ~

■ はじめに

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」にも記載。

https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#LanguageManualUDF-ConditionalFunctions

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