1. RLIKE 사용
정규식으로 문자열 검색을 도와주는 RLIKE 구문을 활용해서 '\'을 찾을수있다
WITH TMP1 AS(SELECT
'test\\test' AS TEST_RE_SLASH_1,
'test\\\\test' AS TEST_RE_SLASH_2,
LENGTH('\\') AS LEN_RE_SLASH_1,
LENGTH('\\\\') AS LEN_RE_SLASH_2,
FROM test.sample
LIMIT 5)
SELECT *
WHERE 1=1
AND TEST_RE_SLASH_1 RLIKE '.*(\\\\).*'
AND TEST_RE_SLASH_2 RLIKE '.*(\\\\\\\\).*'
LIMIT 5;
RLIKE의 정규식에서 ' . '는 어떤 한 문자와 일치하고 ' * '은 왼쪽에 있는 것이 0번에서 여러 번 반복되는 것을 의미한다. 따라서 앞, 뒤에서 마침표가 반복된다
HIVE에서 '\'은 escape를 통해 표현되는데 보통 '\\' 입력하면 예약어에서 벗어나 문자 '\'로 인식한다
그러나 특이하게 RLIKE에서는 '\'을 인식하기위해 표현식으로 '\\\\' 또는 '\\\\\'로 입력해야한다
다소 불안정할수 있기에 두번째 방법을 추천
2. INSTR() 사용
INSTR()로 '\'가 해당 컬럼값에 포함되어있는지 판별한다
SELECT a.adr_nm1, a.adr_nm2
FROM (
SELECT adr_nm1, INSTR(adr_nm, '\\') AS adr_nm2
FROM test.sample
) AS a
WHERE a.adr_nm2 > 0;
INSTR은 컬럼에서 해당 문자열의 위치를 반환한다 그렇기 때문에 '\'이 존재할경우 필연적으로 0이상의 값을 갖게 된다
'Apache Hive' 카테고리의 다른 글
Hive Partitioning (0) | 2020.11.25 |
---|---|
Apache Hive와 Apache Spark SQL의 차이점 (0) | 2020.11.13 |
HIVE SQL - JOIN 이해(공식문서) (0) | 2020.10.28 |
HIVE SQL - EXCHANGE PARTITION (0) | 2020.10.28 |