개요

연산자 (Operators)

연산자는 필터 조건을 설정할 때 사용되며, 속성명과 속성값의 관계를 설명하는 역할을 합니다. 속성에 대한 자세한 내용은 속성 문서를 참고하세요.
핵클의 데이터 분석에서는 아래와 같은 연산자를 제공하며, 선택한 속성명이 갖는 속성값의 타입에 따라 적절한 연산자를 선택해야 합니다.

연산자속성값 선택 가능 개수
= (다음 중 하나)복수 선택 가능
≠ (다음 중 하나가 아닌)복수 선택 가능
> (큰)단일 항목 선택
≥ (크거나 같은)단일 항목 선택
< (작은)단일 항목 선택
≤ (작거나 같은)단일 항목 선택
{=} (정확히 일치하는)복수 선택 가능
{≠} (정확히 일치하지 않는)복수 선택 가능
∋ (다음 중 하나를 포함하는)복수 선택 가능
∌ (다음 중 하나를 포함하지 않는)복수 선택 가능
다음 중 하나로 시작하는복수 선택 가능
다음 중 하나로 시작하지 않는복수 선택 가능
다음 중 하나로 끝나는복수 선택 가능
다음 중 하나로 끝나지 않는복수 선택 가능
(.*) 다음 정규 표현식 중 하나와 일치하는단일 항목 선택
!(.*) 다음 정규 표현식 중 하나와 일치하지 않는단일 항목 선택

예시

광역시에 거주하는 사용자를 선택하고 싶다면 여섯 개의 광역시 중 한 곳에 거주하면 되므로 다음과 같이 필터를 정의할 수 있습니다.

👍

[광역시에 거주하는 사용자] 필터 조건 만들기

  • 속성: 거주지 (해당 속성의 속성명은 residence, 속성값 타입은 String이라고 가정)
  • 연산자: = (다음 중 하나)
  • 연산자에서 말하는 '다음'에 들어갈 속성값: "인천광역시", "대전광역시", "대구광역시", "울산광역시", "부산광역시", "광주광역시"

연산자Single ValueArray Value
= (다음 중 하나)속성이 사용자가 입력한 값들과 하나라도 정확히 일치하는지 확인합니다.

ex) 사용자 입력값: [“foo“, “bar“]

속성 값
• foo → O
• bar → O
• qux → X
배열 속성의 각 원소들이 사용자가 입력한 값들과 하나라도 정확히 일치하는지 확인합니다.

ex) 사용자 입력값: [“foo“, “bar“]

속성 값
• [“foo“, “bar“] → O
• [“foo“, “qux“] → O
• [“fo“, “ba“] → X
• [“qux“] → X
≠ (다음 중 하나가 아닌)= 과 반대

ex) 사용자 입력값: [“foo“, “bar“]

속성 값
• foo → X
• bar → X
• qux → O
= 과 반대

ex) 사용자 입력값: [“foo“, “bar“]

속성 값
• [“foo“, “bar“] → X
• [“foo“, “qux“] → X
• [“fo“, “ba“] → O
• [“qux“] → O
> (큰)속성 값이 피연산자보다 큰지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• 11 → O
• 10 → X
• 9 → X
array 에 속성 값보다 큰 값이 하나라도 존재하는지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• [8, 9, 10] → X
• [9, 10, 11] → O
• [10, 11, 12] → O
≥ (크거나 같은)속성 값이 피연산자보다 크거나 같은지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• 11 → O
• 10 → O
• 9 → X
array 에 속성 값보다 크거나 같은 값이 하나라도 존재하는지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• [8, 9, 10] → O
• [9, 10, 11] → O
• [10, 11, 12] → O
< (작은)속성 값이 피연산자보다 작은지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• 11 → X
• 10 → X
• 9 → O
array 에 속성 값보다 작은 값이 하나라도 존재하는지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• [8, 9, 10] → X
• [9, 10, 11] → O
• [10, 11, 12] → O
≤ (작거나 같은)속성 값이 피연산자보다 작거나 같은지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• 11 → X
• 10 → O
• 9 → O
array 에 속성 값보다 작거나 같은 값이 하나라도 존재하는지 확인합니다.

Ex) 사용자 입력값: 10

속성 값
• [8, 9, 10] → O
• [9, 10, 11] → O
• [10, 11, 12] → O
{=} (정확히 일치하는)선택한 속성군이 피연산자와 정확히 일치하는지 확인합니다.

Ex 1) 사용자 입력값: [“foo“]

속성 값
• foo → O
• foo1 → X
• bar → X

Ex 2) 사용자 입력값: [“foo“, “bar“]

속성 값
• foo → O
• foo1 → X
• bar → O
선택한 속성군이 피연산자와 정확히 일치하는지 확인합니다.

Ex) 사용자 입력값: ["foo","bar"]

속성 값
• [“foo“, “bar“] → O
• [“foo“, “foo1“] → X
• [“foo“] → X
{≠} (정확히 일치하지 않는)Ex 1) 사용자 입력값: [“foo“]

속성 값
• foo → X
• foo1 → O
• bar → O

Ex 2) 사용자 입력값: [“foo“, “bar“]

속성 값
• foo → X
• foo1 → O
• bar → X
Ex) 사용자 입력값: ["foo","bar"]

속성 값
• [“foo“, “bar“] → X
• [“foo“, “foo1“] → O
• [“foo“] → O
∋ (다음 중 하나를 포함하는)속성이 사용자가 입력한 값들과 하나라도 subString으로 일치하는지 확인합니다.

Ex) 사용자 입력값: ["fo","ar"]

속성 값
• foo → O
• bar → O
• qux → X
배열 속성의 각 원소들이 사용자가 입력한 값들과 하나라도 subString으로 일치하는지 확인합니다.

Ex) 사용자 입력값: ["fo","ar"]

속성 값
• [“foo“, “bar“] → O
• [“bar“, “qux“] → O
• [“qux“] → X
∌ (다음 중 하나를 포함하지 않는)Ex) 사용자 입력값: ["fo","ar"]

속성 값
• foo → O
• bar → O
• qux → X
Ex) 사용자 입력값: ["fo","ar"]

속성 값
• [“foo“, “bar“] → X
• [“bar“, “qux“] → X
• [“qux“] → O
다음 중 하나로 시작하는속성이 사용자 입력에 포함된 요소 중 하나로 시작하는지 확인합니다. 사용자 입력의 요소는 속성의 시작 부분과 일치해야 합니다.

Ex) 사용자 입력값: ["fo","ba"]

속성 값
• foo → O
• bar → O
• qux → X
속성이 사용자 입력에 포함된 요소 중 하나로 시작하는지 확인합니다. 사용자 입력의 요소는 속성의 시작 부분과 일치해야 합니다.

Ex) 사용자 입력값[: ["fo","ba"]

속성 값
• [“foo“, “bar“] → O
• [“bar“, “qux“] → O
• [“qux“] → X
다음 중 하나로 시작하지 않는Ex) 사용자 입력값: ["fo","ba"]

속성 값
• foo → X
• bar → X
• qux → O
Ex) 사용자 입력값: ["fo","ba"]

속성 값
• [“foo“, “bar“] → X
• [“bar“, “qux“] → X
• [“qux“] → O
다음 중 하나로 끝나는속성이 사용자 입력에 포함된 요소 중 하나로 시작하는지 확인합니다. 사용자 입력의 요소는 속성의 끝 부분과 일치해야 합니다.

Ex) 사용자 입력값: ["oo","ar"]

속성 값
• foo → O
• bar → O
• qux → X
속성이 사용자 입력에 포함된 요소 중 하나로 시작하는지 확인합니다. 사용자 입력의 요소는 속성의 끝 부분과 일치해야 합니다.

Ex) 사용자 입력값: ["oo","ar"]

속성 값
• [“foo“, “bar“] → O
• [“bar“, “qux“] → O
• [“qux“] → X
다음 중 하나로 끝나지 않는Ex) 사용자 입력값: ["oo","ar"]

속성 값
• foo → X
• bar → X
• qux → O
Ex) 사용자 입력값: ["oo","ar"]

속성 값
• [“foo“, “bar“] → X
• [“bar“, “qux“] → X
• [“qux“] → O
(.*) 다음 정규 표현식 중 하나와 일치하는속성이 사용자가 입력한 값들과 하나라도 정규식으로 일치하는지 체크

Ex) 사용자 입력값: [“f.*“, “\d+”]

속성값
• foo → O
• 1 → O
• qux → X
속성이 사용자가 입력한 값들과 하나라도 정규식으로 일치하는지 체크

Ex) 사용자 입력값: [“f.*“, “\d+”]

속성 값
• [“foo“, “1“] → O
• [“1“, “qux“] → O
• [“qux“] → X
!(.*) 다음 정규 표현식 중 하나와 일치하지 않는Ex) 사용자 입력값: [“f.*“, “\d+”]

속성값
• foo → X
• 1 → X
• qux → O
Ex) 사용자 입력값: [“f.*“, “\d+”]

속성 값
• [“foo“, “1“] → X
• [“1“, “qux“] → X
• [“qux“] → O

정규 표현식

정규식을 이용해 문자열 연산자로 표현할 수 없는 패턴을 이용해서 좀 더 정교한 패턴 매칭을 제공합니다.

예를들어 /api/v1/items/{number} 에 해당하는 URL 경로 집합만을 선택하고 싶은 경우 기존 문자열 연산자로는 불가능합니다. 문자열 연산자에는 숫자만 특정해내는 기능이 없기 때문입니다.

문자열 연산자로 해결할 수 없는 케이스 예시

  • 숫자를 포함하는
  • 문자만을 포함하는
  • 숫자로만 끝나는
  • 숫자로만 시작하는
  • 특정 문자를 포함하면서 숫자로 끝나는

기본적인 문자열 관련 연산은 다음 연산자 이용을 추천드립니다.

  • 다음 중 하나로 시작하는
  • 다음 중 하나로 끝나는
  • 다음 중 하나를 포함하는

알아 놓으면 유용한 정규식 문법

기호

  1. \d+
    1. 연속된 숫자를 의미합니다. 자릿수 상관없이 모든 숫자를 표현 가능합니다.
  2. \D+
    1. 연속된 문자를 의미합니다. 즉 문자열을 나타낼 수 있습니다.
  3. ^
    1. 문자열의 시작임을 알립니다.
    2. ^a 는 a 로 시작하는 문자열을 의미합니다.
  4. $
    1. 문자열의 끝임을 알립니다.
    2. a$ 는 a로 끝나는 문자열을 의미합니다.
  5. {n}
    1. n번 연속됨을 의미합니다.
    2. \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호 : ✅