콘텐츠로 이동

JSON 데이터 타입

JSON 데이터 타입#

개요#

JSON(JavaScript Object Notation)은 데이터 교환 형식으로 널리 사용되고 있는 텍스트 기반의 데이터 형식이다. JSON은 데이터 구조를 직관적으로 표현할 수 있으며, 다양한 타입의 데이터를 입력할 수 있는 유연성을 제공한다. Altibase에서 지원하는 JSON 데이터 타입의 최대 크기는 2 GB(2,147,483,648)이다.

Altibase는 다음의 JSON 표준을 따른다.

  • JSON 정의 관련 표준은 RFC 8259 정의를 따른다.
  • JSON 경로 표현식 관련 표준은 ISO/IEC 19075-6(2021)의 정의를 따른다.
  • JSON 함수 관련 표준은 ISO/IEC 19075-6(2021)의 정의를 따른다.

JSON#

흐름도#

in_row_clause ::=

in_row_clause

구문#

JSON [ IN ROW size ]

설명#

JSON 문서를 효율적으로 저장하고 검색할 수 있도록 JSON 데이터 타입을 제공한다. JSON 문서는 객체(키-값 쌍)나 배열(순서가 있는 값의 목록)의 형태로 저장된다. IN ROW 절에 대한 자세한 설명은 앞서 기술한 "IN ROW 절"을 참고한다.

제약사항#

  • LOB 타입 컬럼의 제약 사항과 동일하다.
  • JSON 문서의 최대 깊이는 256이다.
  • JSON 문서를 처리할 때 Temporary LOB을 사용한다. 따라서, JSON 타입을 사용하려면 TEMPORARY_LOB_ENABLE 프로퍼티를 1로 설정해야 한다.

JSON 함수#

Altibase에서 지원하는 JSON 함수는 아래와 같다. 각 함수의 자세한 내용은 SQL Reference 매뉴얼을 참고한다.

  • JSON 문서 생성 함수
    • JSON_ARRAY
    • JSON_OBJECT
  • JSON 문서 검색 함수
    • JSON_EXISTS
    • JSON_QUERY
    • JSON_VALUE
  • JSON 문서 검증 함수
    • JSON_VALID

JSON 조건 연산자#

IS JSON, IS NOT JSON 의 조건 연산자를 제공하며, JSON 문서가 JSON 형식을 만족하는지 아닌지를 검사하는 연산자이다. 자세한 설명은 SQL ReferenceIS JSON을 참고한다.

JSON 경로 표현식(JSON Path Expression)#

JSON 경로 표현식은 JSON 문서에서 특정 값을 추출하기 위해서 검색에 사용할 조건을 설정한다. Altibase는 JSON 경로 표현식 표준 ISO/IEC 19075-6을 따른다. Altibase에서 지원하는 경로 표현식의 구성 요소는 다음과 같다.

  • 경로 기호
  • 점(.) 연산자
  • 대괄호 연산자
  • 와일드 카드
  • 필터 표현식
경로 표현식 설명
경로 기호 루트 노드(root node)와 현재 노드가 있다. 루트 노드는 '$'로 표현하며, JSON 문서의 시작점을 의미한다. JSON 문서에서 검색을 할 때 루트 노드에서 부터 검색한다. 현재 노드는 '@'로 표현하며, 현재 연산자에 의해 접근하고 있는 JSON 문서의 위치를 의미한다.
점(.) 연산자 점 연산자는 '.'으로 표현하며, JSON 객체의 특정 key에 접근할 때 사용한다.
대괄호 연산자 대괄호 연산자는 '[]'로 표현하며, JSON 배열의 요소에 접근할 때 사용한다. 대괄호 연산자 안에는 숫자, 와일드 카드를 사용할 수 있다.
와일드카드 와일드카드 연산자는 '*'로 표현하며, 점 연산자와 할게 사용하여 모든 객체의 key에 접근하거나, 대괄호 연산자와 함께 사용하여 배열의 모든 요소에 접근할 때 사용한다.
필터 표현식 필터 표현식은 '? (logical-expr)'로 표현하며, 괄호 안의 조건에 맞는 데이터를 추출할 때 사용한다.

JSON 문서에서 JSON 경로 표현식을 이용하여 결과를 추출하는 예제는 아래와 같다.

  • JSON 문서

    {
      "name": "Hong Gildong",
      "age": 22,
      "class": [
        "Mathmatics",
        "Science"
      ],
      "address": {
        "city": "Seoul",
        "country": "Korea"
      }
    }
    
  • JSON 경로 표현식과 결과

    JSON 경로 표현식 결과
    '$' {"name":"Hong Gildong", "age":22, "class":["Mathmatics", "Science"], "address":{"city":"Seoul", "country":"Korea" }}
    '$.name' "Hong Gildong"
    '$.address.city' "Seoul"
    '$.class[0]' "Mathmatics"
    '$.class[1]' "Science"
    '$.class[*]' ["Mathmatics", "Science"]
    '$.age?(@>20)' 22
    '$.age?(@<20)' -

JSON 경로 표현식 제약사항#

Altibase에서 제공하는 JSON 함수에 경로 표현식을 사용할 때 아래의 제약이 있다.

  • 경로 표현식은 문자열 형태로만 사용할 수 있다.
  • 바인드 변수, NULL, 테이블의 컬럼, SQL 함수, 사용자 정의 함수 등을 사용할 수 없다.