Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Spark SQL 해시, 극값과 조건식

행별 극값과 해시는 그룹 집계 함수와 구분합니다. 아래 함수들은 입력 SQL 표현식으로부터 새 열 값을 만듭니다.

해시와 바이너리 표현

함수와 인자반환과 의미
CRC32(expr)바이너리의 CRC32 checksum, bigint
HASH(expr1, expr2, ...)열들의 해시 코드, int
HEX(expr)정수/바이너리 또는 문자열의 16진 표현 문자열
MD5(expr)바이너리의 MD5 digest, 32문자 hex 문자열
SHA1(expr)바이너리의 SHA-1 digest, 40문자 hex 문자열
SHA2(expr, numBits)SHA-2 계열 digest의 hex 문자열

HEX는 정수의 숫자 표현과 문자열 바이트의 표현을 구분합니다. SHA2의 numBits는 224, 256, 384, 512 또는 0이며 0은 256과 같습니다.

SELECT
    CRC32(ENCODE('Spark', 'UTF-8')) AS crc_value,
    HASH('Spark', 1) AS row_hash,
    HEX('Spark') AS hex_text,
    MD5(ENCODE('Spark', 'UTF-8')) AS md5_text,
    SHA1(ENCODE('Spark', 'UTF-8')) AS sha1_text,
    SHA2(ENCODE('Spark', 'UTF-8'), 256) AS sha256_text

해시나 hex는 암호화가 아니며, 작은 값 공간의 개인정보에 해시를 적용했다고 익명성이 보장되지는 않습니다.

여러 값의 최댓값과 최솟값

GREATEST(expr1, expr2, ...)와 LEAST(expr1, expr2, ...)는 적어도 두 인자를 받습니다. NULL을 건너뛰며 모든 값이 NULL일 때만 NULL입니다. 같은 행의 여러 값 중 극값을 구하는 연산으로 그룹 전체의 MAX/MIN과 다릅니다.

SELECT
    GREATEST(1, 3, NULL) AS largest_value,
    LEAST(1, 3, NULL) AS smallest_value

NaN과 불리언

표현식의미
ISNAN(expr)값이 NaN인지 검사
NANVL(first, second)first가 NaN이면 second, 아니면 first
NOT predicate불리언 조건 반전

NANVL은 NaN을 위한 선택이며 NULL을 대체하는 COALESCE와 다릅니다.

SELECT
    ISNAN(CAST('NaN' AS DOUBLE)) AS has_nan,
    NANVL(CAST('NaN' AS DOUBLE), 0.0) AS replacement,
    NOT (3 > 1) AS inverted_condition

WHEN 조건식

SQL에서는 CASE WHEN으로 조건에 따른 값을 선택합니다. 앞에서부터 True인 분기의 결과를 사용하고, 일치한 분기가 없으면 ELSE 값을 사용합니다. ELSE가 없으면 NULL입니다.

SELECT
    value,
    CASE
        WHEN value > 0 THEN 'positive'
        WHEN value = 0 THEN 'zero'
        WHEN value < 0 THEN 'negative'
    END AS sign_category
FROM VALUES (-1), (0), (2), (NULL) AS samples(value)

DataFrame API의 when(condition, value)와 SQL의 CASE 구문은 같은 조건 선택 개념을 다른 문법으로 표현합니다. 반환 분기들의 자료형은 호환되어야 합니다.