55

Hiveに組み込まれている文字列分割関数を探していますか?たとえば、文字列が次の場合:

A|B|C|D|E

次に、次のような関数が必要です。

array<string> split(string input, char delimiter)

私が戻ってくるように:

[A,B,C,D,E]

そのような組み込みの分割関数はHiveに存在しますか?

しか見えませregexp_extractregexp_replaceindexOf()split()文字列関数が見たいです。

4

3 に答える 3

67

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

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

あなたの場合、区切り文字「|」は正規表現として特別な意味を持っているので、「」と呼ばれるべき\\|です。

于 2010-11-04T12:22:01.970 に答える
50

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

SELECT split(ipname,'[\.]')[0] FROM tablename;
于 2012-11-15T23:00:25.030 に答える
12

Bkkbrad によって与えられた答えを明確にするだけです。

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

例えば、

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

プロデュース:

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

しかし、

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

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

["aa","bb"]

メタ文字 '|' を含む 角括弧内では、メタ文字としてではなく、意図したとおりに文字どおりに解釈されます。

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

于 2017-06-09T19:07:56.663 に答える