본문 바로가기
빅데이터 & 시스템/Spark

regexp_extract 함수를 사용 방법

by True_No.9 2023. 7. 10.

Apache Spark 나 Apache Hive에서 `regexp_extract` 함수를 사용하려면 다음과 같은 형식을 사용하세요

sql
regexp_extract(column, 'regular_expression', group_index)

 여기서:

  • `column`은 정규식을 적용하려는 컬럼입니다.
  • `regular_expression`은 적용할 정규식 패턴입니다.
    주의해야 할 점은 문자열이므로 작은따옴표(')로 감싸줘야합니다.
  • `group_index`는 정규식에서 추출하려는 그룹의 인덱스를 나타내며, 0부터 시작합니다.

예를 들어, 명령어로 시작하고 나열된 숫자 네 자리를 추출하려면 다음 쿼리를 사용할 수 있습니다.

sql
SELECT ‌regexp_extract(example_column, '^[A-Za-z]([0-9]{4})', 0) as extracted_digits FROM ‌example_table;

 이 예제에서 `example_column`은 정규식이 적용되는 컬럼이고,

`'^[A-Za-z]([0-9]{4})'`는 알파벳으로 시작하고 그 뒤에 4자리 숫자를 추출하는 정규식입니다.

마지막으로 `0`은 첫 번째 그룹을 추출하는 인덱스입니다.

 

또다른 예제:

텍스트에서 이메일 주소를 추출해 내려면 다음과 같은 쿼리를 사용할 수 있습니다.

sql
SELECT ‌regexp_extract(text_column, '([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6})', 0) as extracted_email FROM ​​​​example_table;

여기서

  • `text_column`: 이메일 주소를 추출할 텍스트를 포함한 컬럼입니다.
  • `'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6})'`: 이메일 주소를 추출하기 위한 정규식 패턴입니다.
    작은따옴표(')로 감싸져 있습니다.
  • `0`: 그룹 인덱스로, 여기서는 첫 번째 그룹을 추출하려고 합니다.

이 쿼리는 `example_table`의 `text_column` 컬럼에서 이메일 주소를 찾아 추출하고,

`extracted_email`이라는 별칭으로 결과를 출력합니다.

 

※ ORACLE 에서 활용

Oracle에서는 `REGEXP_SUBSTR` 함수를 사용하고, 결과에 `IF` 대신 `CASE` 문을 사용하여 동일한 작업을 수행할 수 있습니다. 다음 쿼리를 참조하세요:

sql
SELECT CASE ‌​​​​WHEN REGEXP_SUBSTR(example_column, '^[A-Za-z]([0-9]{4})', 1, 1) IS NULL THEN 'OTHERS' ​​​​​​​​ELSE AA ​​​​END as result_column FROM ‌example_table;

여기서:

  • `REGEXP_SUBSTR(example_column, '^[A-Za-z]([0-9]{4})', 1, 1)`는 알파벳으로 시작하고
    뒤이어 숫자 네 자리가 있는 패턴을 찾습니다.
  • `CASE` 문을 사용해, 결과가 `NULL`인 경우 'OTHERS'를 반환합니다.
  • 그렇지 않은 경우 'AA' 값을 반환합니다.

이 쿼리를 사용하면 `example_table`의 `example_column`에 정규식을

적용한 결과를 기반으로 조건부 값을 얻을 수 있습니다.

'빅데이터 & 시스템 > Spark' 카테고리의 다른 글

Apache Spark에서 JDBC로 DB 연결  (0) 2023.07.19