수학 함수

수학 함수 (Math Functions)

Apache Pinot의 수학 함수는 산술 연산, 수학적 상수, 로그·삼각 함수, 비트 연산 등 다양한 계산을 지원해요.

출처: 문서

본문

ADD(col1, col2, col3...) 두 개 이상 값의 합

SUB(col1, col2) 두 값의 차

MULT(col1, col2, col3...) 두 개 이상 값의 곱

DIV(col1, col2) 두 값의 몫

MOD(col1, col2) 두 값의 나머지

ABS(col1) 값의 절댓값

CEIL(col1) 가장 가까운 정수로 올림

FLOOR(col1) 가장 가까운 정수로 내림

EXP(col1) 오일러 수(e)의 col 거듭제곱

LN(col1) 값의 자연로그

SQRT(col1) 값의 제곱근

ROUNDDECIMAL(col1, col2) 값을 지정한 소수 자리로 반올림

ROUND(timeValue, bucketSize) 에포크 스타일 값을 가장 가까운 버킷 시작으로 반올림

*intDiv(col1, col2)* col1을 col2로 나눈 결과의 정수 값을 반환하며, 내림(바닥 나눗셈) 처리돼요. Long을 반환해요.

사용법: intDiv(col1, col2)
예시: SELECT intDiv(10, 3) FROM myTable — 3 반환

*intDivOrZero(col1, col2)* intDiv와 같지만 0으로 나누거나 최소 음수를 -1로 나눌 때 0을 반환해요.

사용법: intDivOrZero(col1, col2)
예시: SELECT intDivOrZero(10, 0) FROM myTable — 0 반환

*isFinite(col)* 값이 유한하면(무한도 NaN도 아니면) 1, 그렇지 않으면 0을 반환해요.

사용법: isFinite(col)
예시: SELECT isFinite(salary) FROM myTable

*isInfinite(col)* 값이 무한하면(양 또는 음의 무한대) 1, 그렇지 않으면 0을 반환해요.

사용법: isInfinite(col)
예시: SELECT isInfinite(ratio) FROM myTable

*ifNotFinite(valueToCheck, defaultValue)* valueToCheck가 유한하면 그 값을, 그렇지 않으면 defaultValue를 반환해요.

사용법: ifNotFinite(col, defaultValue)
예시: SELECT ifNotFinite(ratio, 0) FROM myTable

*isNaN(col)* 값이 NaN(숫자가 아님)이면 1, 그렇지 않으면 0을 반환해요.

사용법: isNaN(col)
예시: SELECT isNaN(ratio) FROM myTable

*moduloOrZero(col1, col2)* MOD와 같지만 0으로 나누거나 최소 음수를 -1로 나눌 때 0을 반환해요.

사용법: moduloOrZero(col1, col2)
예시: SELECT moduloOrZero(10, 0) FROM myTable — 0 반환

*positiveModulo(col1, col2)* 두 값의 나머지를 반환하며, 항상 음이 아닌 결과를 반환해요.

사용법: positiveModulo(col1, col2)
예시: SELECT positiveModulo(-7, 3) FROM myTable — 2 반환

*negate(col)* 값의 부호를 반전해요.

사용법: negate(col)
예시: SELECT negate(score) FROM myTable

*least(col1, col2)* 두 값 중 작은 값을 반환해요. INT, LONG, FLOAT, DOUBLE, BIG_DECIMAL에 걸쳐 다형성을 가져요.

사용법: least(col1, col2)
예시: SELECT least(score1, score2) FROM myTable

*greatest(col1, col2)* 두 값 중 큰 값을 반환해요. INT, LONG, FLOAT, DOUBLE, BIG_DECIMAL에 걸쳐 다형성을 가져요.

사용법: greatest(col1, col2)
예시: SELECT greatest(score1, score2) FROM myTable

*sign(col)* 값의 부호를 반환해요: 음수이면 -1.0, 0이면 0.0, 양수이면 1.0.

사용법: sign(col)
예시: SELECT sign(profit) FROM myTable

pow(col, exponent) / *power(col, exponent)* 값을 주어진 지수로 거듭제곱해요.

사용법: pow(col, exponent) 또는 power(col, exponent)
예시: SELECT pow(score, 2) FROM myTable

truncate(col) / *truncate(col, scale)* 값을 0 방향으로 절단해요. scale이 제공되면 주어진 소수 자리로 절단해요.

사용법: truncate(col) 또는 truncate(col, scale)
예시: SELECT truncate(3.75) FROM myTable — 3.0 반환
예시: SELECT truncate(3.75, 1) FROM myTable — 3.7 반환

rand() / *rand(seed)* 범위 [0.0, 1.0)의 의사 난수 double 값을 반환해요. 시드가 제공되면 같은 시드에 대해 결과가 결정적이에요. 시드 없이는 결과가 비결정적이에요.

사용법: rand() 또는 rand(seed)
예시: SELECT rand() FROM myTable
예시: SELECT rand(42) FROM myTable

*log2(col)* 값의 밑이 2인 로그를 반환해요.

사용법: log2(col)
예시: SELECT log2(8) FROM myTable — 3.0 반환

*log10(col)* 값의 밑이 10인 로그를 반환해요.

사용법: log10(col)
예시: SELECT log10(1000) FROM myTable — 3.0 반환

*gcd(col1, col2)* 두 long 값의 최대공약수를 반환해요.

사용법: gcd(col1, col2)
예시: SELECT gcd(12, 8) FROM myTable — 4 반환

*lcm(col1, col2)* 두 long 값의 최소공배수를 반환해요.

사용법: lcm(col1, col2)
예시: SELECT lcm(4, 6) FROM myTable — 12 반환

*hypot(col1, col2)* 직각삼각형의 빗변, 즉 sqrt(col1^2 + col2^2)을 중간 오버플로/언더플로 없이 반환해요.

사용법: hypot(col1, col2)
예시: SELECT hypot(3, 4) FROM myTable — 5.0 반환

*byteswapInt(col)* 정수 값의 바이트 순서를 반전해요.

사용법: byteswapInt(col)
예시: SELECT byteswapInt(intCol) FROM myTable

*byteswapLong(col)* long 값의 바이트 순서를 반전해요.

사용법: byteswapLong(col)
예시: SELECT byteswapLong(longCol) FROM myTable

*cbrt(col)* 값의 세제곱근을 반환해요.

사용법: cbrt(col)
예시: SELECT cbrt(27) — 3.0 반환

*exp2(col)* 2를 주어진 거듭제곱으로 반환해요.

사용법: exp2(col)
예시: SELECT exp2(10) — 1024.0 반환

*exp10(col)* 10을 주어진 거듭제곱으로 반환해요.

사용법: exp10(col)
예시: SELECT exp10(3) — 1000.0 반환

*log1p(col)* 1 + col의 자연로그를 반환해요.

사용법: log1p(col)
예시: SELECT log1p(1) — 대략 0.6931471805599453 반환

*sigmoid(col)* 로지스틱 시그모이드 1 / (1 + e^(-col))를 반환해요.

사용법: sigmoid(col)
예시: SELECT sigmoid(0) — 0.5 반환

*pi()* 수학 상수 pi를 반환해요.

사용법: pi()
예시: SELECT pi() — 대략 3.141592653589793 반환

e() / *euler()* 오일러 수, 자연로그의 밑을 반환해요.

사용법: e() 또는 euler()
예시: SELECT e() — 대략 2.718281828459045 반환

*bitCount(col)* LONG 값의 이진 표현에서 설정된 비트 수를 반환해요.

사용법: bitCount(col)
예시: SELECT bitCount(255) — 8 반환

*factorial(col)* 0부터 20까지의 음이 아닌 정수의 팩토리얼을 반환해요. 이 범위를 벗어나는 값은 오류를 발생시켜요.

사용법: factorial(col)
예시: SELECT factorial(5) FROM myTable — 120 반환

widthBucket(value, lo, hi, numBuckets) / *width_bucket(value, lo, hi, numBuckets)* SQL 표준 의미론을 사용해 히스토그램 버킷 번호를 반환해요: value < lo이면 0, value >= hi이면 numBuckets + 1, 그 외에는 1부터 numBuckets 사이의 버킷.

사용법: widthBucket(value, lo, hi, numBuckets) 또는 width_bucket(value, lo, hi, numBuckets)
예시: SELECT widthBucket(5.0, 0.0, 10.0, 5) FROM myTable — 3 반환

비트 연산 함수 (Bitwise Functions)

*bitAnd(a, b)** / **bit_and(a, b)* 두 값에 비트 AND 연산을 수행해요.

사용법: bitAnd(a, b) 또는 bit_and(a, b)
예시: SELECT bitAnd(12, 10) FROM myTable — 8 반환

*bitOr(a, b)** / **bit_or(a, b)* 두 값에 비트 OR 연산을 수행해요.

사용법: bitOr(a, b) 또는 bit_or(a, b)
예시: SELECT bitOr(8, 4) FROM myTable — 12 반환

*bitXor(a, b)** / **bit_xor(a, b)* 두 값에 비트 XOR 연산을 수행해요.

사용법: bitXor(a, b) 또는 bit_xor(a, b)
예시: SELECT bitXor(12, 10) FROM myTable — 6 반환

*bitNot(a)* 값의 모든 비트를 반전하는 비트 NOT 연산을 수행해요.

사용법: bitNot(a)
예시: SELECT bitNot(0) FROM myTable — -1 반환

*bitMask(n)* 위치 n에 단일 비트가 설정된 비트마스크를 만들어요.

사용법: bitMask(n)
예시: SELECT bitMask(3) FROM myTable — 8 반환

*bitShiftLeft(a, n)* 왼쪽 비트 시프트 연산을 수행해요.

사용법: bitShiftLeft(a, n)
예시: SELECT bitShiftLeft(1, 2) FROM myTable — 4 반환

*bitShiftRight(a, n)* 부호 확장하는 산술 오른쪽 비트 시프트 연산을 수행해요.

사용법: bitShiftRight(a, n)
예시: SELECT bitShiftRight(8, 2) FROM myTable — 2 반환

*bitShiftRightUnsigned(a, n)** / **bitShiftRightLogical(a, n)* 0으로 채우는 논리적(부호 없는) 오른쪽 비트 시프트 연산을 수행해요.

사용법: bitShiftRightUnsigned(a, n) 또는 bitShiftRightLogical(a, n)
예시: SELECT bitShiftRightUnsigned(intCol, 1) FROM myTable

*bitExtract(a, n)** / **extractBit(a, n)* 위치 n의 비트를 추출해, 비트가 설정되어 있으면 1, 그렇지 않으면 0을 반환해요. 항상 INT를 반환해요.

사용법: bitExtract(a, n) 또는 extractBit(a, n)
예시: SELECT bitExtract(12, 2) FROM myTable — 1 반환

더 알아보기 (Learn more)