복붙노트

[HADOOP] Hive에 문자열 분할 기능이 있습니까?

HADOOP

Hive에 문자열 분할 기능이 있습니까?

내가 하이브에 내장 된 문자열 분할 기능을 찾고 있는데? 예 : String의 경우

A | B | C | D | E

다음과 같은 기능을 원합니다. 배열 분할 (문자열 입력, 문자 구분 기호)

그래서 나는 [A, B, C, D, E]로 돌아 간다.

그런 내장 된 분할 기능이 Hive에 존재합니까? regexp_extract와 regexp_replace 만 볼 수 있습니다. 나는 indexOf ()와 split ()을보고 싶다. 문자열 함수.

감사

아제이

해결법

  1. ==============================

    1.정규식을 기반으로하는 분할 함수가 있습니다. 이 튜토리얼에는 나열되어 있지 않지만 wiki의 언어 매뉴얼에 나와 있습니다.

    정규식을 기반으로하는 분할 함수가 있습니다. 이 튜토리얼에는 나열되어 있지 않지만 wiki의 언어 매뉴얼에 나와 있습니다.

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

    귀하의 경우, 구분 기호 "|" 정규 표현식으로 특별한 의미가 있으므로 "\\ |"로 언급해야합니다.

  2. ==============================

    2.Hive의 split에 대한 또 다른 흥미로운 사용법은 테이블의 열 ipname에 "abc11.def.ghft.com"값이 있고 "abc11"을 꺼내기를 원할 때입니다.

    Hive의 split에 대한 또 다른 흥미로운 사용법은 테이블의 열 ipname에 "abc11.def.ghft.com"값이 있고 "abc11"을 꺼내기를 원할 때입니다.

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

    3.Bkkbrad가 준 답변에 대한 설명.

    Bkkbrad가 준 답변에 대한 설명.

    나는이 제안을 시도했지만 그것은 나를 위해 작동하지 않았다.

    예를 들어,

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

    생산 :

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

    그러나,

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

    원하는 결과를 얻었습니다.

    ["aa","bb"]
    

    메타 문자 '|'포함 대괄호 안에 대문자로 해석되지 않고 문자 그대로 해석됩니다.

    regexp의이 동작을 상세히 설명하려면 다음을 참조하십시오. http://www.regular-expressions.info/charclass.html

  4. from https://stackoverflow.com/questions/4065999/does-hive-have-a-string-split-function by cc-by-sa and MIT license