Hiveのtranslateとreplaceの使い方

Hiveでtranslateとreplaceの使い所を間違えてたのでまとめる。
「これ」を「あれ」にしたいのにtranslateを使ってわけわからんことになった。
(知ってる人にはそりゃそうだと言われそうだけど、きっと勘違いしている人もいるはず)

translateとreplace

translate

translate(string|char|varchar input, string|char|varchar from, string|char|varchar to)
inputをfromに対応するtoで置き換え ですが、fromとtoは1文字ごとに置き換えます。

1
translate("やまねこのこじろう", "ねこ", "いぬ")

これは、
ね → い
こ → ぬ
に置き換えられるので
「やまいぬじろう」
に置換されます。

「ねこ」を「いぬ」にしたい場合は、translateでは意図せぬ結果になることがあります。

replace

replace(string A, string OLD, string NEW)

こちらがいつもの置換です。 OLDの文字列をNEWの文字列に置換します。

1
replace("やまねこのこじろう", "ねこ", "いぬ")

この結果は、
ねこ → いぬ
なので
「やまいぬのこじろう」
となります。

実験

1
2
3
4
-- Hive実験 translate と replace
select
translate("やまねこのこじろう", "ねこ", "いぬ") as translate
, replace("やまねこのこじろう", "ねこ", "いぬ") as replace

結果

translate replace
1 やまいぬじろう やまいぬのこじろう

参考