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 배열은 그대로 유지돼요.

더 알아보기 (Learn more)