web-dev-qa-db-ja.com

Hiveには文字列分割関数がありますか?

Hiveに組み込みの文字列分割関数を探していますか?例えば。文字列が

A | B | C | D | E

配列split(string input、char delimiter)のような関数が欲しい

[A、B、C、D、E]が返ってきます。

このような組み込みの分割関数はHiveに存在しますか? regexp_extractとregexp_replaceのみが表示されます。 indexOf()およびsplit()文字列関数が見たいです。

ありがとう

アジャイ

39
user855

正規表現に基づいた分割関数が存在します。 チュートリアルでは にはリストされていませんが、 wikiの言語マニュアル にはリストされています。

split(string str, string pat)
   Split str around pat (pat is a regular expression) 

あなたの場合、区切り文字「| "は正規表現として特別な意味を持つため、" \\| "。

50
Bkkbrad

Hiveでの分割のもう1つの興味深いユースケースは、たとえば、テーブルの列ipnameの値が「abc11.def.ghft.com」であり、「abc11」を引き出したい場合です。

SELECT split(ipname,'[\.]')[0] FROM tablename;
38

Bkkbradによって与えられた答えの明確化。

私はこの提案を試みましたが、うまくいきませんでした。

例えば、

split('aa|bb','\\|')

生産:

["","a","a","|","b","b",""]

しかし、

split('aa|bb','[|]')

望ましい結果が得られました。

["aa","bb"]

メタキャラクター「|」を含める角括弧内では、メタ文字としてではなく、意図したとおりに文字通りに解釈されます。

正規表現のこの動作の詳細については、以下を参照してください: http://www.regular-expressions.info/charclass.html

6
spelunk1