FILTERMV 함수
FILTERMV 함수
Apache Pinot의 filterMv 함수는 멀티밸류(Multi-value) 컬럼의 각 요소를 조건(predicate)에 대해 평가하고, 조건을 만족하는 요소만 담은 필터링된 멀티밸류 배열을 반환해요. CROSS JOIN UNNEST 없이 요소 수준에서 배열을 걸러낼 때 유용해요.
출처: 문서
본문
filterMv 함수는 멀티밸류 컬럼의 각 요소를 조건에 대해 평가하고, 조건을 만족하는 요소만 담은 필터링된 멀티밸류 배열을 반환해요.
시그니처
filterMv(mvColumn, 'predicate')
인자
- mvColumn - 필터링할 멀티밸류 컬럼
- predicate - 각 요소의 자리표시자로
v를 사용하는 조건 표현식을 담은 문자열. 조건은 배열의 각 요소마다 평가돼요.
지원 연산자
조건은 다음 연산자를 지원해요:
- 비교:
=,!=,>,>=,<,<= - 집합 포함:
IN,NOT IN - 범위:
BETWEEN - 패턴 매칭:
REGEXP_LIKE - 논리:
AND,OR,NOT
반환 값
조건을 만족하는 요소만 담은 멀티밸류 배열.
사용 예시
비교 연산자로 정수 필터링
SELECT filterMv(intArrayCol, 'v > 10 AND v < 50') AS filtered
FROM myTable
LIMIT 10
결과: intArrayCol에서 10보다 크고 50보다 작은 요소들을 반환해요.
REGEXP_LIKE로 문자열 필터링
SELECT filterMv(stringArrayCol, 'REGEXP_LIKE(v, ''^/api/.*'')')
FROM myTable
LIMIT 10
결과: /api/로 시작하는 정규식 패턴에 일치하는 stringArrayCol 요소들을 반환해요.
IN 연산자로 필터링
SELECT filterMv(categoryCol, 'v IN (''A'', ''B'', ''C'')')
FROM myTable
LIMIT 10
결과: categoryCol에서 'A', 'B', 'C' 중 하나인 요소들을 반환해요.
BETWEEN으로 필터링
SELECT filterMv(scoreCol, 'v BETWEEN 70 AND 90')
FROM myTable
LIMIT 10
결과: scoreCol에서 70과 90 사이(포함)인 요소들을 반환해요.
GROUP BY에서 집계와 함께 필터링
SELECT
userId,
COUNT(*) as count,
filterMv(eventTypes, 'v = ''click''') as clickEvents
FROM events
GROUP BY userId
LIMIT 10
결과: 각 사용자에 대해 'click' 이벤트만 담은 필터링된 배열을 반환해요.
참고
- 조건은 평가되는 요소의 자리표시자로
v를 사용해야 해요. - 조건의 문자열 값은 단일 따옴표로 감싸거나 적절히 이스케이프해야 해요.
filterMv는CROSS JOIN UNNEST없이 요소 수준 필터링을 하는 데 유용해요.- 필터링된 결과의 요소 순서는 원래 배열의 순서와 일치해요.
- 빈 배열이나 NULL 배열은 그대로 유지돼요.