연산자

개요

연산자는 필터 조건을 설정할 때 사용되며, 속성명과 속성값의 관계를 설명하는 역할을 합니다.

핵클의 데이터 분석에서는 아래와 같은 연산자를 제공하며, 선택한 속성명이 갖는 속성값의 타입에 따라 적절한 연산자를 선택해야 합니다.

연산자 (Operators)

연산자
속성값 선택 가능 개수

= (다음 중 하나)

복수 선택 가능

≠ (다음 중 하나가 아닌)

복수 선택 가능

> (큰)

단일 항목 선택

≥ (크거나 같은)

단일 항목 선택

< (작은)

단일 항목 선택

≤ (작거나 같은)

단일 항목 선택

{=} (정확히 일치하는)

복수 선택 가능

{≠} (정확히 일치하지 않는)

복수 선택 가능

∋ (다음 중 하나를 포함하는)

복수 선택 가능

∌ (다음 중 하나를 포함하지 않는)

복수 선택 가능

다음 중 하나로 시작하는

복수 선택 가능

다음 중 하나로 시작하지 않는

복수 선택 가능

다음 중 하나로 끝나는

복수 선택 가능

다음 중 하나로 끝나지 않는

복수 선택 가능

(.*) 다음 정규 표현식 중 하나와 일치하는

단일 항목 선택

!(.*) 다음 정규 표현식 중 하나와 일치하지 않는

단일 항목 선택

예시

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

circle-check

= (다음 중 하나)

속성이 사용자가 입력한 값들과 하나라도 정확히 일치하는지 확인합니다.

  • Single Value — 사용자 입력값: ["foo", "bar"]

    • foo → O

    • bar → O

    • qux → X

  • Array Value — 사용자 입력값: ["foo", "bar"]

    • ["foo", "bar"] → O

    • ["foo", "qux"] → O

    • ["fo", "ba"] → X

    • ["qux"] → X

≠ (다음 중 하나가 아닌)

= 과 반대입니다.

  • Single Value — 사용자 입력값: ["foo", "bar"]

    • foo → X

    • bar → X

    • qux → O

  • Array Value — 사용자 입력값: ["foo", "bar"]

    • ["foo", "bar"] → X

    • ["foo", "qux"] → X

    • ["fo", "ba"] → O

    • ["qux"] → O

> (큰)

속성 값이 피연산자보다 큰지 확인합니다.

  • Single Value — 사용자 입력값: 10

    • 11 → O

    • 10 → X

    • 9 → X

  • Array Value — 사용자 입력값: 10 (배열에 큰 값이 하나라도 존재하는지)

    • [8, 9, 10] → X

    • [9, 10, 11] → O

    • [10, 11, 12] → O

≥ (크거나 같은)

속성 값이 피연산자보다 크거나 같은지 확인합니다.

  • Single Value — 사용자 입력값: 10

    • 11 → O

    • 10 → O

    • 9 → X

  • Array Value — 사용자 입력값: 10

    • [8, 9, 10] → O

    • [9, 10, 11] → O

    • [10, 11, 12] → O

< (작은)

속성 값이 피연산자보다 작은지 확인합니다.

  • Single Value — 사용자 입력값: 10

    • 11 → X

    • 10 → X

    • 9 → O

  • Array Value — 사용자 입력값: 10

    • [8, 9, 10] → O

    • [9, 10, 11] → O

    • [10, 11, 12] → X

≤ (작거나 같은)

속성 값이 피연산자보다 작거나 같은지 확인합니다.

  • Single Value — 사용자 입력값: 10

    • 11 → X

    • 10 → O

    • 9 → O

  • Array Value — 사용자 입력값: 10

    • [8, 9, 10] → O

    • [9, 10, 11] → O

    • [11, 12, 13] → X

{=} (정확히 일치하는)

선택한 속성군이 피연산자와 정확히 일치하는지 확인합니다.

  • Single Value — 사용자 입력값: ["foo"]

    • foo → O

    • foo1 → X

    • bar → X

  • Single Value — 사용자 입력값: ["foo", "bar"]

    • foo → O

    • foo1 → X

    • bar → O

  • Array Value — 사용자 입력값: ["foo", "bar"]

    • ["foo", "bar"] → O

    • ["foo", "foo1"] → X

    • ["foo"] → X

{≠} (정확히 일치하지 않는)

{=} 와 반대입니다.

  • Single Value — 사용자 입력값: ["foo"]

    • foo → X

    • foo1 → O

    • bar → O

  • Single Value — 사용자 입력값: ["foo", "bar"]

    • foo → X

    • foo1 → O

    • bar → X

  • Array Value — 사용자 입력값: ["foo", "bar"]

    • ["foo", "bar"] → X

    • ["foo", "foo1"] → O

    • ["foo"] → O

∋ (다음 중 하나를 포함하는)

속성이 사용자가 입력한 값들과 하나라도 부분 문자열(substring)으로 일치하는지 확인합니다.

  • Single Value — 사용자 입력값: ["fo", "ar"]

    • foo → O

    • bar → O

    • qux → X

  • Array Value — 사용자 입력값: ["fo", "ar"]

    • ["foo", "bar"] → O

    • ["bar", "qux"] → O

    • ["qux"] → X

∌ (다음 중 하나를 포함하지 않는)

∋ 와 반대입니다.

  • Single Value — 사용자 입력값: ["fo", "ar"]

    • foo → X

    • bar → X

    • qux → O

  • Array Value — 사용자 입력값: ["fo", "ar"]

    • ["foo", "bar"] → X

    • ["bar", "qux"] → X

    • ["qux"] → O

다음 중 하나로 시작하는

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

  • Single Value — 사용자 입력값: ["fo", "ba"]

    • foo → O

    • bar → O

    • qux → X

  • Array Value — 사용자 입력값: ["fo", "ba"]

    • ["foo", "bar"] → O

    • ["bar", "qux"] → O

    • ["qux"] → X

다음 중 하나로 시작하지 않는

'다음 중 하나로 시작하는'과 반대입니다.

  • Single Value — 사용자 입력값: ["fo", "ba"]

    • foo → X

    • bar → X

    • qux → O

  • Array Value — 사용자 입력값: ["fo", "ba"]

    • ["foo", "bar"] → X

    • ["bar", "qux"] → X

    • ["qux"] → O

다음 중 하나로 끝나는

속성이 사용자 입력에 포함된 요소 중 하나로 끝나는지 확인합니다. 사용자 입력의 요소는 속성의 끝 부분과 일치해야 합니다.

  • Single Value — 사용자 입력값: ["oo", "ar"]

    • foo → O

    • bar → O

    • qux → X

  • Array Value — 사용자 입력값: ["oo", "ar"]

    • ["foo", "bar"] → O

    • ["bar", "qux"] → O

    • ["qux"] → X

다음 중 하나로 끝나지 않는

'다음 중 하나로 끝나는'과 반대입니다.

  • Single Value — 사용자 입력값: ["oo", "ar"]

    • foo → X

    • bar → X

    • qux → O

  • Array Value — 사용자 입력값: ["oo", "ar"]

    • ["foo", "bar"] → X

    • ["bar", "qux"] → X

    • ["qux"] → O

(.*) 다음 정규 표현식 중 하나와 일치하는

속성이 사용자가 입력한 값들과 하나라도 정규식으로 일치하는지 체크합니다.

  • Single Value — 사용자 입력값: ["f.*", "\d+"]

    • foo → O

    • 1 → O

    • qux → X

  • Array Value — 사용자 입력값: ["f.*", "\d+"]

    • ["foo", "bar"] → X

    • ["bar", "qux"] → X

    • ["qux"] → O

!(.*) 다음 정규 표현식 중 하나와 일치하지 않는

'(.*)'과 반대입니다.

  • Single Value — 사용자 입력값: ["f.*", "\d+"]

    • foo → X

    • 1 → X

    • qux → O

  • Array Value — 사용자 입력값: ["f.*", "\d+"]

    • ["foo", "1"] → X

    • ["1", "qux"] → X

    • ["qux"] → O

정규 표현식

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

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

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

  • 숫자를 포함하는

  • 문자만을 포함하는

  • 숫자로만 끝나는

  • 숫자로만 시작하는

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

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

  • 다음 중 하나로 시작하는

  • 다음 중 하나로 끝나는

  • 다음 중 하나를 포함하는

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

기호

  1. \d+연속된 숫자를 의미합니다. 자릿수 상관없이 모든 숫자를 표현 가능합니다.

  2. \D+연속된 문자를 의미합니다. 즉 문자열을 나타낼 수 있습니다.

  3. ^문자열의 시작임을 알립니다.

  4. ^a 는 a 로 시작하는 문자열을 의미합니다.

  5. $문자열의 끝임을 알립니다.

  6. a$ 는 a로 끝나는 문자열을 의미합니다.

  7. {n}n번 연속됨을 의미합니다.

  8. \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호 :

마지막 업데이트