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 |
---|