가상 디바이스

가상 디바이스는 인증서가 설치된 사용자 IoT 장비를 관리할 수 있도록 보조하는 기능입니다. 가상 디바이스를 생성해서 인증서와 연결하면 인증서가 설치된 IoT 장비의 인증서 활성, 비활성 기능을 통해 메시지 송, 수신을 제어할 수 있습니다.

예를 들면, 공장 내 온도 측정 장비 10대에 인증서 10개를 할당했을 경우 사용자는 어떤 장비에 어떤 인증서를 할당했는지 알 수 없거나 인증서 관리를 위해 별도의 프로그램을 이용해야 합니다. 이러한 불편을 해결하기 위하여 "TempDevice"라는 가상 디바이스를 생성하고 장비에 설치한 인증서를 연결하면 사용자는 어떤 인증서가 어떤 장비에 사용되는지를 쉽게 파악할 수 있고, 인증서를 변경 및 삭제하는 경우에도 어떤 장비에 영향을 주는지 쉽게 파악할 할 수 있습니다.

가상 디바이스 생성

img

1. 좌측 메뉴에서 Virtual Devices를 선택합니다.

2. 화면 중앙의 "가상 디바이스 생성" 버튼을 선택합니다.

3. 가상 디바이스에서 사용할 가상 디바이스의 이름 및 설명을 입력합니다.

가상 디바이스 삭제

1. 좌측 메뉴의 Virtual Devices를 선택합니다.

2. 목록 화면에서 삭제할 가상 디바이스를 선택한 후 상단의 삭제 버튼을 선택합니다.

인증서 추가 및 분리

사용자가 생성한 가상 디바이스에 인증서를 할당하여 어떤 인증서를 어떤 장비에 할당 후 사용하고 있는지 관리할 수 있습니다.

img

1. 좌측 메뉴에서 Certificates를 선택하여 인증서 화면으로 이동합니다.

2. 가상 디바이스 연결 화면에서 인증서와 연결하고자 하는 가상 디바이스를 검색합니다.

3. 검색 결과의 연결할 가상 디바이스를 더블 클릭하여 우측의 "연결할 가상 디바이스" 영역으로 이동합니다.

4. 하단의 "연결" 버튼을 선택하면 인증서와 가상 디바이스의 연결이 완료됩니다.

5. 분리는 상세정보의 연결된 가상 디바이스 목록에서 가상 디바이스를 선택한 후 "분리"를 누르면 인증서와 가상 디바이스의 연결이 분리됩니다.

인증서 활성/비활성/삭제

인증서의 기능 중 활성/비활성/삭제 기능이 있습니다. 인증서를 비활성 하는 경우, Cloud IoT Core 서비스에서는 해당 인증서로 인증한 메시지의 경우 유효하지 않은 것으로 판단하고 메시지를 받지 않습니다. 메시지를 다시 전송하려면 인증서를 활성 버튼을 선택하면 됩니다.

더 이상 인증서를 사용하지 않는 경우, 삭제를 눌러 인증서를 삭제할 수 있습니다. 삭제된 인증서는 복구할 수 없습니다.

Rules 활성/비활성/삭제

사용자가 지정한 규칙이 더 이상 필요 없는 경우 삭제 버튼을 눌러서 삭제를 할 수 있습니다. 만약 일시적으로 사용을 중지하고 싶은 경우 비활성 버튼을 누르면 해당 트리거 및 액션은 동작하지 않습니다. 사용자가 활성 버튼을 누르면 중지되었던 규칙이 다시 실행됩니다.

Dashboard

Dashboard에서는 "이번달 IoT 기기 연결 시간, 현재 연결된 클라이언트 수, 메세지 이용 수, 규칙 이용 수" 등의 정보를 확인할 수 있습니다.

"이번 달 IoT 기기 연결 시간"은 사용자의 IoT 장비가 IoT Core 서비스에 접속한 총 시간을 나타내며, 이번달 1일부터 현재까지의 기간 동안 총 사용 시간을 보여줍니다. 상세보기를 누르면 시간별 접속한 장비의 수, 연결시간, 소계(장비 대수 * 사용시간)와 같은 상세 접속 이력을 확인하실 수 있습니다.

"현재 연결된 클라이언트 수"는 현재 IoT Core 서비스로 접속중인 클라이언트(ex:IoT 장비)의 개수를 보여줍니다. 예를 들어 2대의 장비를 사용해서 IoT Core 서비스에 접속한 경우 2로 표시됩니다. 상세보기를 누르면 현재 접속중인 클라이언트의 IP, Port, 사용중인 인증서의 Common Name, 연결 시작 시간 정보를 확인할 수 있습니다.

트리거 쿼리 내장함수

쿼리 내에 유용하게 사용할 수 있는 내장함수를 제공합니다.

  • 내장함수의 이름은 대문자 소문자 상관없이 입력가능하며, 입력 인자의 유효한 인자의 타입이 아닐경우 쿼리가 실패합니다. 실패이유를 에러 액션을 추가하면 이유를 확인할 수 있습니다.

  • 내장함수는 Alias(별칭)를 사용하여 쿼리 결과값인 JSON의 Key값으로 명시적으로 표시하는 것을 권장합니다.

    • 예시

      SELECT ABS(volt) AS volt FROM "topic"
      
  • 아래 각 내장함수의 예시에서 입력 인자는 상수값을 입력하였으나 입력 JSON메세지의 Key 값을 입력 시 JSON Value가 평가됩니다.

  • 내장함수에 인자값은 상수값 입력도 가능합니다. 상수값의 String의 경우 '(Single Quote).로 감싸고 bool값은 true, false로 JSON값은 `(Grave Accent)로 감싸서 입력합니다.
  • 내장함수의 인자수가 다르거나, 인자 타입이 상이할 경우 에러가 발생합니다. 에러 액션을 추가하여 에러를 확인할 수 있습니다.
  • 함수명(입력인자 타입) : 반환값 타입
  • Number : 정수 또는 소수 / Integer : 정수 / String : 문자열 / Bool : 참 거짓 논리값/ Any : 타입 상관없음

ABS(Number) : Number

절대값을 반환합니다.

  • 예 : ABS(-10)=10

SIGN(Number) : Number

부호를 반환하며 부호가 + 이면 1, - 이면 -1, 0 이면 0을 반환합니다.

  • 예 : SIGN(-5)=-1, SIGN(5)=1, SIGN(0)=0

CEIL(Number) : Integer

가장 가까운 정수로 올림합니다.

  • 예 : CEIL(1.1)=2, CEIL(-1.1)=-1

FLOOR(Number) : Integer

가장 가까운 정수로 내림합니다.

  • 예 : FLOOR(1.8)=1, FLOOR(-1.8)=-2

ROUND(Number) : Integer

가장 가까운 정수로 반올림합니다.

  • 예 : ROUND(0.5)=1, ROUND(-1.5)=-2

TRUNC(Number, Number) : Number

두번째 인자의 숫자로 소수점을 절사합니다. 두번째 인자가 음수일 경우 0, 소수일경우 소수부분을 버림하여 두번째 인자가 대체됩니다.

  • 예 : TRUNC(3.3, 0)=3, TRUNC(3.33312, 2)=3.33, TRUNC(3.000, 2)=3, TRUNC(2.23, -2)=2, TRUNC(2.23, 1.5)=2.2

MOD(Integer, Integer) : Integer

첫번째 인자를 두번째 인자로 나눈 나머지를 반환합니다. % 연산자를 대신 사용가능합니다.

  • 예 : MOD(5, 2)=1

SQRT(Number) : Number

숫자를 제곱근을 반환합니다.

  • 예 : SQRT(1.44)=1.2

POWER(Number, Number) : Number

첫번째 인자를 두번째 인자로 거듭제곱한 결과를 반환합니다.

  • 예 : POWER(2, 4)=16

LOG(Number, Number) : Number

첫번째 인자의 값을 두번째 인자의 값을 밑(Base)로 하여 Log 값을 반환합니다. 첫번째 인자가 0이면 "-inf" String을, 0보다 작으면 "nan"String을 반환합니다. 두번째 인자가 0보다 작거나 같은경우, 1인 경우 "nan" String을 반환합니다.

  • 예 : Log(100, 10)=2

EXP(Number) : Number

e(자연상수,오일러 상수)로 입력된 숫자의 거듭제곱 값을 반환합니다.

  • 예 : EXP(1)=2.718281828459045

LN(Number) : Number

e(자연상수,오일러 상수)를 밑(Base)으로 하여 입력된 숫자의 Log 값을 반환합니다. 숫자가 0보다 작으면 "nan", 0이면 "-inf" String을 반환합니다.

  • 예 : LN(10)=2.302585092994046

삼각함수(Number) : Number

삼각함수 값을 반환합니다.

  • 사용가능한 삼각함수는 SIN(n), SINH(n) COS(n), COSH(n), TAN(n), TANH(n), ASIN(n), ACOS(n), ATAN(n), ATAN2(n), ATANH(n) 입니다.

BITOR(Integer, Integer) : Integer

두 값을 bit값으로 변형후 OR연산한 값을 10진수로 반환합니다.

  • 예 : BITOR(4, 2)=6

BITAND(Integer, Integer) : Integer

두 값을 bit값으로 변형후 AND연산한 값을 10진수로 반환합니다.

  • 예 : BITAND(4, 2)=0

BITXOR(Integer, Integer) : Integer

두 값을 bit값으로 변형후 XOR연산한 값을 10진수로 반환합니다.

  • 예 : BITXOR(5, 1)=4

NANVL(Any, Any) : Any

첫 번째 인자가 숫자면 첫 번째 인자를, 숫자가 아니면 두 번째 인자를 반환합니다.

  • 예 : NANVL(1.1, 1.5)=1.1, NANVL('STRING', '3')="3"

ISNULL(Any) : Bool

값이 null 값일 경우 참(true), 아닐 경우 거짓(false) bool 값으로 반환합니다.

  • 예 : ISNULL("not null")=false, ISNULL(null)=true

NULLIF(Any, Any) : Any

입력된 두 개의 인자 값이 같으면 null, 다르면 첫 번째 인자 값을 반환합니다.

  • 예1 : NULLIF(1, 1)=null
  • 예2 : NULLIF(deviceId, null)
    • deviceId의 값이 null이면 null, 아니면 deviceId의 값을 반환
  • 예3 : SELECT NULLIF(deviceId, null) AS deviceId FROM "topic" WHERE member IS NOT NULL
  • 예4 : SELECT NULLIF(deviceId, '2x33sed') AS deviceId FROM "topic"

EXISTS(Any) : Bool

JSON list 또는 JSON object의 아이템이 존재하는지 확인합니다. 존재할 경우 참(true), 아닐 경우 거짓(false) bool 값으로 반환합니다.

  • 예1 : EXISTS(5)=false - JSON list 또는 JSON object가 아니기 때문에
  • 예2
    • Input JSON
        { "device" : [] } 또는 { "device" : {} }
      
    • Query
      SELECT EXISTS(device) as empty_device FROM "iot"
      
    • Result JSON
        { "empty_device" : false }
      

RAND() : Number

0.0~1.0 범위의 균등 확률로 랜덤값을 반환합니다.

  • 예 : RAND()=0.1897250037492607

CHAR_LENGTH(String) : Integer

문자열의 문자 수를 반환합니다.

  • 예 : CHAR_LENGTH('heLLo')=5

UPPER(String) : String

대문자로 치환하여 반환합니다. 알파벳 이외의 문자는 영향을 받지 않습니다.

  • 예 : UPPER('hi99')="HI99"

LOWER(String) : String

소문자로 치환하여 반환합니다. 알파벳 이외의 문자는 영향을 받지 않습니다.

  • 예 : UPPER('NEXT99')="next99"

TRIM(표현식 String FROM String) : String

문자열의 앞뒤 특정 문자를 제거합니다. TRIM(String), TRIM(표현식 FROM String), TRIM(표현식 String FROM String) 처럼 다양한 형태로 사용가능합니다.

  • LEADING의 경우 시작부분의 문자열만을 TRAILING의 경우 끝부분의 문자열만을 BOTH는 양쪽 모두 제거합니다.
  • 기본적으로 LEADING, TRAILING, BOTH 사이에 특정 문자를 지정하여 해당 문자를 제거할 수 있으며 지정하지 않으면 공백을 제거합니다.
  • TRIM('   foobar   ')                  -- "foobar"
    TRIM('   \tfoobar\t    ')             -- "\tfoobar\t"
    TRIM(LEADING FROM '    foobar    ')   -- "foobar    "
    TRIM(TRAILING FROM '    foobar    ')  -- "    foobar"
    TRIM(BOTH FROM '    foobar    ')     -- "foobar"
    TRIM(BOTH '1' FROM '11foobar11')             -- "foobar"
    TRIM(BOTH '12' FROM '1112211foobar22211122') -- "foobar"
    

LEADING_PAD(String, Integer, String(옵션)) : String

문자열의 시작 부분에 특정 문자열을 추가합니다.

  • 예 : LEADING_PAD('device', 2)="  device", LEADING_PAD('device', 2, 'mm')="mmdevice"

TRAILING_PAD(String, Integer, String(옵션)) : String

문자열의 끝 부분에 특정 문자열을 추가합니다.

  • 예 : TRAILING_PAD('device', 2)="device  ", TRAILING_PAD('device', 2, 'mm')="devicemm"

NUMBYTES(String) : Integer

문자열의 UTF-8 인코딩 기준 바이트 수를 반환합니다.

  • 예 : NUMBYTES('good')=4, NUMBYTES('∀')=3

STARTSWITH(String, String) : Bool

첫번째 인자가 두 번째 인자의 문자열로 시작하는지 참(true),거짓(false) bool 값으로 반환합니다.

  • 예 : STARTSWITH('hello', 'he')=true

ENDSWITH(String, String) : Bool

첫번째 인자가 두번째 인자 문자열로 끝나는지 참(true),거짓(false) bool 값으로 반환합니다.

  • 예 : ENDSWITH('hello', 'lo')=true

INDEXOF(String, String) : Integer

첫번째 인자에 두 번째 인자의 문자열이 존재할 경우 같은 첫번째 문자열의 시작 인덱스를 반환합니다. 찾지 못한다면 -1을 반환합니다.

  • 예 : INDEXOF('hello', 'el')=1, INDEXOF('hello', 'xx')=-1

REPLACE(String, String, String) : String

첫 번째 인자의 문자열에서 두 번째 인자의 문자열을 찾아 세 번째 인자로 모두 치환하여 반환합니다.

  • 예 : REPLACE('hello', 'l', 'ee')="heeeeeo"

REGEXP_REPLACE(String, String, String) : String

첫 번째 인자의 문자열에서 두 번째 정규식과 일치하는 문자열을 모두 찾아 세 번째 인자로 모두 치환하여 반환합니다. 세번째 인자에 "$"를 사용하여 캡처 그룹을 참조 할 수 있습니다.

  • 예1 : REGEXP_REPLACE('xdevice', 'x{.*}', 'invalid')="invalid"
  • 예2 : REGEXP_REPLACE('x is b y is a', '(.) is (.))', '$2')="a"

REGEXP_MATCHES(String, String) : Bool

첫 번째 인자의 문자열에서 두 번째 정규식과 일치하는 문자열이 포함되어 있으면 참(true) bool 값으로 반환합니다.

  • 예 : REGEXP_MATCHES('hello', 'l{2,}')=true, REGEXP_MATCHES('halo', 'l{2,}')=false

REGEXP_SUBSTR(String, String) : String

첫 번째 인자의 문자열에서 두 번째 정규식과 일치하는 첫번째 일치 문자열을 찾습니다.

  • 예 : REGEXP_SUBSTR('byebyeY', '(bye)*')="byebye"

CONCAT(String, String, ...) : String

모든 인자의 STRING값을 연결합니다.

  • 예 : CONCAT('he', 'll', 'o')="hello"

LIST(Any, Any, ...) : JSONList

모든 인자의 값을 List로 만들어 반환합니다.

  • 예 : LIST('he', 1, true, null, {"a":"b"},[1])=["he", 1, true, null, {"a":"b"}, [1,2,3]]

FLATLIST(Any, Any, ...) : JSONList

모든 인자의 값을 List로 만들어 반환합니다. 인자중에 List가 있을경우 풀어서 더합니다.

  • 예 : LIST('he', 1, true, null, {"a":"b"},[1,2,3])=["he", 1, true, null, {"a":"b"}, 1, 2, 3]

SUBSTRING(String, Integer, Integer) : String

문자열을 자릅니다. 첫 번째 인자의 문자열에서 두 번째 인자 숫자 번째 글자부터 세번째 인자 개수 만큼 문자열을 반환합니다. 세번째 인자가 없다면 두 번째 인자부터 그 뒤 모든 문자열을 반환합니다.

  • 예 : SUBSTRING('12345', 0)="12345", SUBSTRING('12345', 1)="12345", SUBSTRING('12345', 3)="345" SUBSTRING('12345', 2, 3)="2", SUBSTRING('12345', -2, 0)="" (empty값) , SUBSTRING('12345', 5, 5)=""(empty)

NEWUUID() : String

임의의 16바이트 UUID를 반환합니다.

  • 예 : NEWUUID()="0491e6b5-afee-4a39-97a3-14bc6c35fda9"

HASH(String, String) : String

첫번째 인자를 두번째 인자의 타입으로 해시를 구합니다.

  • 지원하는 해시타입은 MD2, MD5, SHA-1, SHA-224, SHA-384, SHA-256, SHA-512 이며 대소문자는 구분하지 않지만 정확히 타입을 입력하여야 합니다.

  • 예 : HASH('iotgood', 'sha-1')="edcf3d81bd181b9b37bc9748766b16345f7fb405"

ENCODE(String, String) : String

첫번째 인자를 두번째 인자의 인코딩 타입으로 인코딩합니다.

  • 지원하는 인코딩 타입은 Base64만 지원하며대 정확히 타입을 입력하여야 합니다.

  • 예 : ENCODE('iot', 'base64')="aW90"

DECODE(String, String) : String

첫번째 인자를 두번째 인자의 디코딩 타입으로 디코딩합니다.

  • 지원하는 디코딩 타입은 Base64만 지원하며대 정확히 타입을 입력하여야 합니다.

  • 예 : DECODE('aW90', 'base64')="iot"

CHR(Integer) : String

입력된 Integer에 대응하는 ASCII 문자를 반환합니다.

  • 예 : CHR(65)="A"

GET_ITEM(JSONObject 또는 JSONList 또는 String) : Any

첫번째 인자값에서 두번째 인자의 순서의 아이템을 가지고 옵니다. 첫번째 인자가 String이면 해당하는 Index의 글자 하나를 가져옵니다.

  • 예1 : 리스트에서 가져오기 GET_ITEM(["banana", "apple", "grape"], 2)="grape"
  • 예2 : 오브젝트에서 가져오기 GET_ITEM({"device":"none"}, 'device')="none"
  • 예3 : String에서 가져오기 GET_ITEM('banana', 2)="n"

SIZE(JSONObject 또는 JSONList) : Integer

JSON 값의 Size를 반환합니다.

  • 예1 : 리스트의 아이템 개수를 반환

    • Input JSON
      {
        "lux": [null, 2, "3"]
      }
      
    • Query
      SELECT SIZE(t.lux) AS "count" FROM "topic" AS t
      
    • Result JSON
      {
        "count": 3
      }
      
  • 예2 : 키-값 쌍의 수를 반환

    • Input JSON

      {
        "info": {
          "dv1": 1,
          "volt": "1v",
          "id": null
        },
        "lux": [1, 2]
      }
      
    • Query

      SELECT SIZE(t.info) AS "count" FROM "topic" AS t
      
    • Result JSON

      {
        "count": 3
      }
      
  • 예3 : JSON 값을 직접 입력할 경우 `(Grave Accent)로 감싸서 입력 가능합니다.

    • Query

      SELECT SIZE(`{ "device": 1, "lux": 1}`) AS "count" FROM "topic" AS t
      
    • Result JSON

      {
        "count": 2
      }
      

COALESCE(...) : Any

인자들 중에 null이 아닌 값 중 제일 왼쪽의 인자의 값을 반환합니다. 입력인자는 가변으로 최소 1개는 입력되어야합니다.

  • 예 : COALESCE('s', null, 1)='s', COALESCE(null, null, 1)=1, COALESCE(null, null)=null

CAST(Any AS type) : type

값을 형변환 합니다.

  • type에는 boolean, integer, float, string을 사용할 수 있습니다.
  • 예1 : Boolean으로 형변환 (1, 1.0, 'true'만 true로 변환. 그 외는 false)
    • CAST(0 AS boolean)=false
    • CAST(1 AS boolean)=true
    • CAST(1.1 AS boolean)=true
    • CAST('1' AS boolean)=false
    • CAST('true' AS boolean)=true
  • 예2
    • CAST(true AS integer)=1
    • CAST(false AS integer)=0
    • CAST(1.75 AS integer)=1
    • CAST('aa' AS integer)=(error 발생)
    • CAST('22' AS integer)=22
  • 예3
    • CAST('2.2' AS float)=2.2
    • CAST(true AS float)=1.0
    • CAST(true AS string)="true"

UNIXTIME_NOW() : Integer

현재 시간의 Unix 타임스탬프(밀리초)를 구합니다.

  • 예 : UNIXTIME_NOW()=1594614865656

UNIXTIME_TO_STRING(Integer, String, String(옵션)) : String

첫번째 인자를 두번째 인자 날짜 포맷 형식에 맞게 변환하여 문자열을 변환합니다. 세 번째 인자는 TimeZone이며 값이 없을경우 UTC TimeZone기준으로 변환합니다.

    • UNIXTIME_TO_STRING(1594579192000, 'yyyy MM dd hh:mm:ss z', 'Asia/Seoul')="2020 07 13 03:39:52 KST"
    • UNIXTIME_TO_STRING(1594579192000, 'hh:mm:ss')="06:39:52"
  • Time Zone 설정 참조 UTC Offset

STRING_TO_UNIXTIME(String, String, String(옵션)) : Integer

첫번째 인자를 두번째 인자 날짜 포맷 형식에 맞게 문자열을 Unix 타임스탬프(밀리초)로 변환합니다. 세 번째 인자는 TimeZone이며 값이 없을경우 UTC TimeZone기준으로 변환합니다.

    • STRING_TO_UNIXTIME('2020 07 13 03:39:52', 'yyyy MM dd hh:mm:ss', 'Asia/Seoul')=1594579192000
    • STRING_TO_UNIXTIME('2020 07 13 06:39:52.222', 'yyyy MM dd hh:mm:ss.SSS')=1594622392222
  • Time Zone 설정 참조 UTC Offset

EXTRACT(표현식 FROM Integer) : Integer

Unix 타임스탬프에서 표현식을 사용하여 UTC Timezone으로 YEAR, MONTH, HOUR, MINUTE, DAY, SECOND 값을 가져올 수 있습니다.

  EXTRACT(YEAR FROM 1594579192031)                           -- 2020
  EXTRACT(MONTH FROM 1594579192031)                          -- 7
  EXTRACT(HOUR FROM 1594579192031)                           -- 18
  EXTRACT(DAY FROM 1594579192031)                            -- 12
  EXTRACT(MINUTE FROM 1594579192031)                         -- 39
  EXTRACT(SECOND FROM 1594579192031)                         -- 52

ADD_TIME(표현식, Integer, Integer) : Integer

Unix 타임스탬프에서 표현식을 사용하여 UTC Timezone으로 YEAR, MONTH, HOUR, MINUTE, DAY, SECOND 값을 더 하고 뺄수 있습니다. 두번째 인자값을 세번째 인자값에 표현식 단위로 더하게 되며 - 값이 가능합니다.

예 : ADD_TIME(MINUTE,- 10 1594579198031)=1594578598031

DIFF_TIME(표현식, Integer, Integer) : Integer

Unix 타임스탬프에서 표현식을 사용하여 UTC Timezone으로 YEAR, MONTH, HOUR, MINUTE, DAY, SECOND 기준으로 시간의 차이를 구할 수 있습니다. 결과값이 -일 경우 앞의 Unix 타임스탬프가 더 큰 경우 입니다.

예 : DIFF_TIME(SECOND, 1594579192031, 1594579198031)=6 예 : DIFF_TIME(MINUTE, 1594579992031, 1594579198031)=-13

CASE 구문

Case구문을 사용하여 switch와 같은 분기 처리를 할 수 있습니다. 적어도 하나의 WHEN절은 필요하며 ELSE절은 반드시 팔요하지 않습니다.

  CASE 평가값 WHEN 값1 THEN 반환값1
  WHEN 값2 THEN 반환값2 ... 
  ELSE 반환값나머지 END
  • WHEN에는 평가값이 같은지 틀린지만 확인 가능하며 부등호를 사용할 수 없습니다.

  • 예1

    • Input JSON
        { "fruit" : "apple" }
      
    • Query
      SELECT CASE fruit WHEN 'apple' THEN 'red' WHEN 'banana' THEN 'yellow' ELSE 'no color' END as color FROM "fruit/color"
      
    • Result JSON
        { "color": "red" }
      
  • 예2 평가값과 값1,값2... 에는 Number, String 모두 가능하며 Key값으로 JSON Value를 참조할 수 있습니다.

    • Input JSON
        { "my_score" : 31, "team_score" : 30 }
      
    • Query
      SELECT CASE 30 WHEN my_score THEN my_score * 2 WHEN team_score THEN team_score/2 ELSE 'nothing 30' END as final_score FROM "score/30"
      
    • Result JSON
        { "final_score" : 15 }
      

리터럴 구문

리터럴 값을 직접 작성할 수 있습니다.

  • 예1

    • Input JSON
        { "xy": [47.606,-122.332] }
      
    • Query
      SELECT {'x': GET_ITEM(xy, 0),'y':GET_ITEM(xy, 1)} as result FROM "topic/coord"
      
    • Result JSON
        { "result" : { "x" : 47.606, "y" : -122.332 } }
      
  • 예2

    • Input JSON
         {"lat" : 47.696, "long" : -122.332}
      
    • Query
      SELECT [lat,long] as lat_long FROM "topic/coord"
      
    • Result JSON
        { "lat_long" : [47.606,-122.332]}
      

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...