NULL 처리 함수
NULL 처리 함수 (Null Handling Functions)
Pinot은 null 값을 테스트·처리·전파하기 위한 함수를 제공해요. 논리 연산자는 SQL 표준 3값 논리(three-valued logic)를 따르며 Trino 호환 null 처리를 지원합니다.
참고: 이 함수들을 사용하려면 테이블에서 null 처리를 활성화해야 해요. 테이블의 인덱스 설정에서
"enableColumnBasedNullHandling": true를 설정하세요.
출처: 문서
본문
isNull
isNull(col)
값이 null이면 true, 그렇지 않으면 false를 반환해요.
SELECT orderId, isNull(discount) AS has_no_discount
FROM orders
WHERE isNull(discount)
LIMIT 10
isNotNull
isNotNull(col)
값이 null이 아니면 true, 그렇지 않으면 false를 반환해요.
SELECT orderId, total
FROM orders
WHERE isNotNull(couponCode)
LIMIT 10
isDistinctFrom
isDistinctFrom(col1, col2)
두 값이 서로 다르면 true를 반환하며, null을 알려진 값으로 취급해요. null 두 개는 서로 다르지 않은 것으로 간주하여 false를 반환하고, null과 null이 아닌 값을 비교하면 서로 다른 것으로 간주하여 true를 반환해요.
SELECT isDistinctFrom(oldPrice, newPrice) AS price_changed
FROM priceHistory
LIMIT 10
-- Returns false when both are null, true when only one is null
isNotDistinctFrom
isNotDistinctFrom(col1, col2)
null을 알려진 값으로 취급해 두 값이 같으면 true를 반환해요. null 두 개는 서로 다르지 않은 것으로 간주하여 true를 반환합니다. isDistinctFrom의 부정입니다.
SELECT isNotDistinctFrom(shippingAddr, billingAddr) AS same_address
FROM orders
LIMIT 10
coalesce
coalesce(col1, col2, col3, ...)
인자 목록에서 첫 번째 null이 아닌 값을 반환해요. 모든 인자가 null이면 null을 반환합니다.
SELECT coalesce(preferredName, firstName, 'Unknown') AS displayName
FROM users
LIMIT 10
caseWhen
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE defaultResult
END
조건을 순서대로 평가해 처음 true가 되는 조건의 결과를 반환해요. 조건이 하나도 맞지 않으면 ELSE 값, ELSE 절이 없으면 null을 반환합니다.
SELECT orderId,
CASE WHEN total > 1000 THEN 'premium'
WHEN total > 100 THEN 'standard'
ELSE 'basic'
END AS tier
FROM orders
LIMIT 10
nullIf
nullIf(value1, value2)
value1이 value2와 같으면 null, 그렇지 않으면 value1을 반환해요. 센티널(sentinel) 값을 null로 바꿀 때 유용합니다.
SELECT nullIf(status, 'N/A') AS status
FROM events
LIMIT 10
-- Returns null when status is 'N/A', otherwise returns the status value
AND
bool_col1 AND bool_col2
3값 논리를 따르는 논리 AND 연산자예요. 두 피연산자 중 하나가 false면 false, 하나가 null이고 다른 하나가 false가 아니면 null, 둘 다 true일 때만 true를 반환해요.
| a | b | a AND b |
|---|---|---|
| TRUE | TRUE | TRUE |
| TRUE | FALSE | FALSE |
| TRUE | NULL | NULL |
| FALSE | NULL | FALSE |
| NULL | NULL | NULL |
SELECT *
FROM orders
WHERE isPaid AND isShipped
LIMIT 10
OR
bool_col1 OR bool_col2
3값 논리를 따르는 논리 OR 연산자예요. 두 피연산자 중 하나가 true면 true, 하나가 null이고 다른 하나가 true가 아니면 null, 둘 다 false일 때만 false를 반환해요.
| a | b | a OR b |
|---|---|---|
| TRUE | FALSE | TRUE |
| TRUE | NULL | TRUE |
| FALSE | FALSE | FALSE |
| FALSE | NULL | NULL |
| NULL | NULL | NULL |
SELECT *
FROM orders
WHERE isPaid OR isCOD
LIMIT 10
NOT
NOT bool_col
논리 NOT 연산자예요. 입력이 null이면 null, 그렇지 않으면 부울 부정을 반환합니다.
| a | NOT a |
|---|---|
| TRUE | FALSE |
| FALSE | TRUE |
| NULL | NULL |
SELECT *
FROM orders
WHERE NOT isCancelled
LIMIT 10