Spark SQL 수학 함수
숫자 함수의 인자는 열 또는 상수 SQL 표현식입니다. 데이터 타입의 범위와 ANSI 설정에 따라 overflow와 잘못된 값의 처리가 달라질 수 있습니다.
반올림과 부호
| 함수와 인자 | 의미 |
|---|---|
ABS(expr) | 절댓값 |
BROUND(expr[, scale]) | 기본 0자리, HALF_EVEN 반올림 |
CEIL(expr) | 올림 |
FLOOR(expr) | 내림 |
NEGATIVE(expr) | 단항 음수, 부호 반전 |
RINT(expr) | 가장 가까운 수학적 정수를 double로 반환 |
ROUND(expr[, scale]) | 기본 0자리, HALF_UP 반올림 |
SIGNUM(expr) | 부호 값 |
scale이 0 이상이면 소수 자리, 음수이면 정수부 자릿수에서 반올림합니다. HALF_EVEN은 정확한 중간값을 짝수 쪽으로 처리하는 bankers' rounding입니다.
SELECT
ROUND(2.5, 0) AS half_up,
BROUND(2.5, 0) AS half_even,
ROUND(1234.5, -2) AS hundreds,
ABS(-5) AS absolute_value
로그, 지수와 거듭제곱
| 함수와 인자 | 의미 |
|---|---|
CBRT(expr) | 세제곱근 |
EXP(expr) | e의 거듭제곱 |
EXPM1(expr) | exp(expr)-1 |
FACTORIAL(expr) | 팩토리얼. 0~20 범위이며 그 밖은 NULL |
HYPOT(left, right) | 중간 overflow/underflow를 피하며 sqrt(left*left+right*right) 계산 |
LOG(expr) | 자연로그 |
LOG10(expr) | 밑 10의 로그 |
LOG1P(expr) | ln(1+expr) |
LOG2(expr) | 밑 2의 로그 |
POW(left, right) | 첫 값의 두 번째 값 거듭제곱 |
SQRT(expr) | 제곱근 |
HYPOT/POW의 두 번째 인자에는 다른 열이나 숫자 상수를 사용할 수 있습니다. 열 이름을 문자열 리터럴로 인용하지 않도록 구분합니다.
각도와 삼각함수
| 함수와 인자 | 의미 |
|---|---|
ACOS(expr) | 역코사인, 결과 0~π |
ASIN(expr) | 역사인, 결과 -π/2~π/2 |
ATAN(expr) | 역탄젠트 |
ATAN2(y, x) | 직교좌표 (x,y)의 극각. 첫 인자는 y축 좌표 |
COS(expr) | 코사인 |
COSH(expr) | 쌍곡 코사인 |
SIN(expr) | 사인 |
SINH(expr) | 쌍곡 사인 |
TAN(expr) | 탄젠트 |
TANH(expr) | 쌍곡 탄젠트 |
DEGREES(expr) | 라디안을 도로 변환 |
RADIANS(expr) | 도를 라디안으로 변환 |
각도 변환의 DataFrame API 이름으로 toDegrees/toRadians를 볼 수 있지만 SQL에서는 DEGREES/RADIANS 구문을 사용합니다. 삼각함수의 각도와 역함수의 반환은 라디안입니다.
SELECT
DEGREES(3.141592653589793) AS angle_degrees,
RADIANS(180) AS angle_radians,
ATAN2(1.0, 2.0) AS polar_angle
진법과 비트 이동
| 함수와 인자 | 의미 |
|---|---|
BIN(expr) | long 값의 이진 표현 문자열 |
CONV(number_string, fromBase, toBase) | 문자열 숫자의 진법 변환 |
SHIFTLEFT(expr, numBits) | 왼쪽 비트 이동 |
SHIFTRIGHT(expr, numBits) | 부호를 유지하는 오른쪽 이동 |
SHIFTRIGHTUNSIGNED(expr, numBits) | 부호 없는 오른쪽 이동 |
나머지
PMOD(dividend, divisor)는 양의 제수에 대해 비음수 나머지를 얻는 데 사용합니다. 음수 제수까지 결과가 항상 양수라고 가정하지 않습니다. 예를 들어 PMOD(-3,4)는 1이고, 음수 제수의 PMOD(-5,-6)는 -5가 될 수 있습니다.
SELECT
PMOD(-3, 4) AS non_negative_remainder,
CONV('1010', 2, 10) AS decimal_text,
SHIFTLEFT(1, 2) AS shifted_value,
FACTORIAL(5) AS factorial_value
조건부 NULL 처리와 여러 열의 최댓값/최솟값은 해시와 조건식, 집계 수준의 합계/평균은 집계 함수와 구분합니다.