연산자
개요
연산자는 필터 조건을 설정할 때 사용되며, 속성명과 속성값의 관계를 설명하는 역할을 합니다.
핵클의 데이터 분석에서는 아래와 같은 연산자를 제공하며, 선택한 속성명이 갖는 속성값의 타입에 따라 적절한 연산자를 선택해야 합니다.
연산자 (Operators)
= (다음 중 하나)
복수 선택 가능
≠ (다음 중 하나가 아닌)
복수 선택 가능
> (큰)
단일 항목 선택
≥ (크거나 같은)
단일 항목 선택
< (작은)
단일 항목 선택
≤ (작거나 같은)
단일 항목 선택
{=} (정확히 일치하는)
복수 선택 가능
{≠} (정확히 일치하지 않는)
복수 선택 가능
∋ (다음 중 하나를 포함하는)
복수 선택 가능
∌ (다음 중 하나를 포함하지 않는)
복수 선택 가능
다음 중 하나로 시작하는
복수 선택 가능
다음 중 하나로 시작하지 않는
복수 선택 가능
다음 중 하나로 끝나는
복수 선택 가능
다음 중 하나로 끝나지 않는
복수 선택 가능
(.*) 다음 정규 표현식 중 하나와 일치하는
단일 항목 선택
!(.*) 다음 정규 표현식 중 하나와 일치하지 않는
단일 항목 선택
예시
광역시에 거주하는 사용자를 선택하고 싶다면 여섯 개의 광역시 중 한 곳에 거주하면 되므로 다음과 같이 필터를 정의할 수 있습니다.
[광역시에 거주하는 사용자] 필터 조건 만들기
속성: 거주지 (해당 속성의 속성명은 residence, 속성값 타입은 String이라고 가정)
연산자: = (다음 중 하나)
연산자에서 말하는 '다음'에 들어갈 속성값: "인천광역시", "대전광역시", "대구광역시", "울산광역시", "부산광역시", "광주광역시"
= (다음 중 하나)
속성이 사용자가 입력한 값들과 하나라도 정확히 일치하는지 확인합니다.
Single Value — 사용자 입력값:
["foo", "bar"]foo→ Obar→ Oqux→ X
Array Value — 사용자 입력값:
["foo", "bar"]["foo", "bar"]→ O["foo", "qux"]→ O["fo", "ba"]→ X["qux"]→ X
≠ (다음 중 하나가 아닌)
= 과 반대입니다.
Single Value — 사용자 입력값:
["foo", "bar"]foo→ Xbar→ Xqux→ O
Array Value — 사용자 입력값:
["foo", "bar"]["foo", "bar"]→ X["foo", "qux"]→ X["fo", "ba"]→ O["qux"]→ O
> (큰)
속성 값이 피연산자보다 큰지 확인합니다.
Single Value — 사용자 입력값:
1011→ O10→ X9→ X
Array Value — 사용자 입력값:
10(배열에 큰 값이 하나라도 존재하는지)[8, 9, 10]→ X[9, 10, 11]→ O[10, 11, 12]→ O
≥ (크거나 같은)
속성 값이 피연산자보다 크거나 같은지 확인합니다.
Single Value — 사용자 입력값:
1011→ O10→ O9→ X
Array Value — 사용자 입력값:
10[8, 9, 10]→ O[9, 10, 11]→ O[10, 11, 12]→ O
< (작은)
속성 값이 피연산자보다 작은지 확인합니다.
Single Value — 사용자 입력값:
1011→ X10→ X9→ O
Array Value — 사용자 입력값:
10[8, 9, 10]→ O[9, 10, 11]→ O[10, 11, 12]→ X
≤ (작거나 같은)
속성 값이 피연산자보다 작거나 같은지 확인합니다.
Single Value — 사용자 입력값:
1011→ X10→ O9→ O
Array Value — 사용자 입력값:
10[8, 9, 10]→ O[9, 10, 11]→ O[11, 12, 13]→ X
{=} (정확히 일치하는)
선택한 속성군이 피연산자와 정확히 일치하는지 확인합니다.
Single Value — 사용자 입력값:
["foo"]foo→ Ofoo1→ Xbar→ X
Single Value — 사용자 입력값:
["foo", "bar"]foo→ Ofoo1→ Xbar→ O
Array Value — 사용자 입력값:
["foo", "bar"]["foo", "bar"]→ O["foo", "foo1"]→ X["foo"]→ X
{≠} (정확히 일치하지 않는)
{=} 와 반대입니다.
Single Value — 사용자 입력값:
["foo"]foo→ Xfoo1→ Obar→ O
Single Value — 사용자 입력값:
["foo", "bar"]foo→ Xfoo1→ Obar→ X
Array Value — 사용자 입력값:
["foo", "bar"]["foo", "bar"]→ X["foo", "foo1"]→ O["foo"]→ O
∋ (다음 중 하나를 포함하는)
속성이 사용자가 입력한 값들과 하나라도 부분 문자열(substring)으로 일치하는지 확인합니다.
Single Value — 사용자 입력값:
["fo", "ar"]foo→ Obar→ Oqux→ X
Array Value — 사용자 입력값:
["fo", "ar"]["foo", "bar"]→ O["bar", "qux"]→ O["qux"]→ X
∌ (다음 중 하나를 포함하지 않는)
∋ 와 반대입니다.
Single Value — 사용자 입력값:
["fo", "ar"]foo→ Xbar→ Xqux→ O
Array Value — 사용자 입력값:
["fo", "ar"]["foo", "bar"]→ X["bar", "qux"]→ X["qux"]→ O
다음 중 하나로 시작하는
속성이 사용자 입력에 포함된 요소 중 하나로 시작하는지 확인합니다. 사용자 입력의 요소는 속성의 시작 부분과 일치해야 합니다.
Single Value — 사용자 입력값:
["fo", "ba"]foo→ Obar→ Oqux→ X
Array Value — 사용자 입력값:
["fo", "ba"]["foo", "bar"]→ O["bar", "qux"]→ O["qux"]→ X
다음 중 하나로 시작하지 않는
'다음 중 하나로 시작하는'과 반대입니다.
Single Value — 사용자 입력값:
["fo", "ba"]foo→ Xbar→ Xqux→ O
Array Value — 사용자 입력값:
["fo", "ba"]["foo", "bar"]→ X["bar", "qux"]→ X["qux"]→ O
다음 중 하나로 끝나는
속성이 사용자 입력에 포함된 요소 중 하나로 끝나는지 확인합니다. 사용자 입력의 요소는 속성의 끝 부분과 일치해야 합니다.
Single Value — 사용자 입력값:
["oo", "ar"]foo→ Obar→ Oqux→ X
Array Value — 사용자 입력값:
["oo", "ar"]["foo", "bar"]→ O["bar", "qux"]→ O["qux"]→ X
다음 중 하나로 끝나지 않는
'다음 중 하나로 끝나는'과 반대입니다.
Single Value — 사용자 입력값:
["oo", "ar"]foo→ Xbar→ Xqux→ O
Array Value — 사용자 입력값:
["oo", "ar"]["foo", "bar"]→ X["bar", "qux"]→ X["qux"]→ O
(.*) 다음 정규 표현식 중 하나와 일치하는
속성이 사용자가 입력한 값들과 하나라도 정규식으로 일치하는지 체크합니다.
Single Value — 사용자 입력값:
["f.*", "\d+"]foo→ O1→ Oqux→ X
Array Value — 사용자 입력값:
["f.*", "\d+"]["foo", "bar"]→ X["bar", "qux"]→ X["qux"]→ O
!(.*) 다음 정규 표현식 중 하나와 일치하지 않는
'(.*)'과 반대입니다.
Single Value — 사용자 입력값:
["f.*", "\d+"]foo→ X1→ Xqux→ O
Array Value — 사용자 입력값:
["f.*", "\d+"]["foo", "1"]→ X["1", "qux"]→ X["qux"]→ O
정규 표현식
정규식을 이용해 문자열 연산자로 표현할 수 없는 패턴을 이용해서 좀 더 정교한 패턴 매칭을 제공합니다.
예를들어 /api/v1/items/{number} 에 해당하는 URL 경로 집합만을 선택하고 싶은 경우 기존 문자열 연산자로는 불가능합니다. 문자열 연산자에는 숫자만 특정해내는 기능이 없기 때문입니다.
문자열 연산자로 해결할 수 없는 케이스 예시
숫자를 포함하는
문자만을 포함하는
숫자로만 끝나는
숫자로만 시작하는
특정 문자를 포함하면서 숫자로 끝나는
기본적인 문자열 관련 연산은 다음 연산자 이용을 추천드립니다.
다음 중 하나로 시작하는
다음 중 하나로 끝나는
다음 중 하나를 포함하는
알아 놓으면 유용한 정규식 문법
기호
\d+연속된 숫자를 의미합니다. 자릿수 상관없이 모든 숫자를 표현 가능합니다.\D+연속된 문자를 의미합니다. 즉 문자열을 나타낼 수 있습니다.^문자열의 시작임을 알립니다.^a는 a 로 시작하는 문자열을 의미합니다.$문자열의 끝임을 알립니다.a$는 a로 끝나는 문자열을 의미합니다.{n}n번 연속됨을 의미합니다.\d{2}는 두자리 숫자를 의미합니다.
부분 일치와 전체 일치
정규식은 기본적으로 부분일치를 제공합니다.
부분 일치
/v1//api/v1/items/1 : ✅
/api/v1/items/apples/1 : ✅
전체 일치의 경우 시작과 끝 기호를 통해 표현이 가능합니다.
^/api/v1/items/1$/api/v1/items/1 : ✅
/api/v1/items/apples/1 : ❌
url 경로 매칭
특정 경로가 숫자로 끝나는(ex. 아이디)
/api/v1/items/\d+/api/v1/items/1 : ✅
/api/v1/items/apples/1 : ❌
/api/v1/items/apples/\d+/api/v1/items/apples/1 : ✅
/api/v1/items/bananas/1 : ❌
경로에 특정 문자열을 포함하는
/v1//api/v1/items/1 : ✅
/api/v2/items/1 : ❌
경로에 지정된 종류의 특정 문자열을 포함하면서 숫자로 끝나는
/api/v1/items/(apples|bananas)/\d+/api/v1/items/apples/1 : ✅
/api/v1/items/bananas/1 : ✅
/api/v1/items/oranges/1 : ❌
그외 문자열 매칭 이벤트 속성으로 특정 형식의 주소만 선택하고 싶은 경우는 아래와 같이 설정할 수 있습니다.
역삼로 (숫자) (숫자)동 (숫자)호
역삼로 \d+ \d+동 \d+호역삼로 301 101동 101호 : ✅
역삼로 301 1003호 : ❌
테헤란로 301 101동 101호 : ❌
1층에 사는 사람들만 선택도 가능합니다. \d{n} 은 숫자가 n번 반복됨을 의미합니다.
1\d{2}호101호 ~ 199호 : ✅
마지막 업데이트