■ はじめに
https://dk521123.hatenablog.com/entry/2020/03/10/224640
の続き。 長いHQLを実行した際にエラーになったので、 その長いHQLのサブクエリを単独で実行してどこに原因があるかを 調査していた。 その際、regexp_replace を使っていたので、メモしておく。
目次
【1】regexp_replace() 【2】構文 第二引数:PATTERN について 【3】サンプル 例1:簡単な例 例2:特殊文字の置き換え 例3:複数の特殊文字の置き換え 例4:regexp_replaceのネスト 例5:特殊文字の置き換え+CASE文
【1】regexp_replace()
* 正規表現(REGular EXPression)による文字列の置き換え (replace)
【2】構文
-- PATTERN で定義されている Java 正規表現構文と -- 一致する INITIAL_STRING 内の条件にREPLACEMENTを置き換える regexp_replace( string INITIAL_STRING, string PATTERN, string REPLACEMENT)
第二引数:PATTERN について
* 複数していた場合、「|」で区切って指定
より抜粋 ~~~~~~ For example, regexp_replace("foobar", "oo|ar", "") returns 'fb.' ~~~~~~ => 「oo」又は「ar」を ""(空行) で置き換わったので「fb」 (「.」はミス?)
※ Java 正規表現構文
https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Pattern.html
【3】サンプル
例1:簡単な例
hive> SELECT REGEXP_REPLACE('Hello world, Mike!','Mike','Tom'); OK Hello world, Tom!
例2:特殊文字の置き換え
hive> SELECT REGEXP_REPLACE('Hello world!!!','\\!','\\.'); OK Hello world...
例3:複数の特殊文字の置き換え
hive> SELECT REGEXP_REPLACE('Hello world!#+','\\!|\\#|\\+','\\.'); OK Hello world...
例4:regexp_replaceのネスト
hive> SELECT REGEXP_REPLACE(REGEXP_REPLACE( UPPER('hello\\world\\"!!'),'\\!|\\\\|\\"',' '), '( )+', ''); OK HELLOWORLD
例5:特殊文字の置き換え+CASE文
-- ex1 hive> SELECT CASE WHEN REGEXP_REPLACE(UPPER('u.s.a'), '\\.', '') IN ('USA', 'US') THEN 'USA' ELSE 'Other' END; OK USA -- ex2 hive> SELECT CASE WHEN REGEXP_REPLACE(REGEXP_REPLACE( UPPER('hello\\world\\"!!'),'\\!|\\\\|\\"',' '), '( )+', '') IN ('HELLO', 'WORLD', 'HELLOWORLD') THEN 'This is a Hello world!' ELSE 'NOT Hello world...' END; OK This is a Hello world! -- CASE文:CASE WHEN <condition> THEN <result1> ELSE <result2> END; -- 詳細は、以下の関連記事を参照のこと
Hive / HiveQL ~ CASE文 ~
https://dk521123.hatenablog.com/entry/2021/06/19/073248
参考文献
関連記事
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 ~ CASE文 ~
https://dk521123.hatenablog.com/entry/2021/06/19/073248
Hive / HiveQL ~ HiveQL関数 / 文字列置換編 ~
https://dk521123.hatenablog.com/entry/2020/03/10/224640
Hive / HiveQL ~ HiveQL関数・文字列関数編 ~
https://dk521123.hatenablog.com/entry/2021/06/21/231033
Hive / HiveQL ~ HiveQL関数 / NULL関連編 ~
https://dk521123.hatenablog.com/entry/2021/06/22/213241
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