JSON_EXTRACT_PATH_TEXT

JSON_EXTRACT_PATH_TEXT

첫 번째 인자를 JSON 문자열로 구문 분석하고, 두 번째 인자의 경로가 가리키는 요소의 값을 반환해요. 이는 TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))와 동등해요.

출처: Snowflake SQL Reference - JSON_EXTRACT_PATH_TEXT

본문

구문

JSON_EXTRACT_PATH_TEXT( <column_identifier> , '<path_name>' )

인자

  • 추출하려는 데이터가 있는 컬럼의 이름이에요.
  • 추출하려는 요소로 가는 경로를 포함하는 문자열이에요.

반환 값

반환 값의 데이터 타입은 VARCHAR예요.

사용상 주의사항

  • 경로 이름이 어떤 요소에도 해당하지 않으면 함수는 NULL을 반환해요.
  • 경로 이름 구문은 표준 JavaScript 표기법이에요. 마침표(예: .)와 인덱스 연산자(예: [<index>])로 시작하는 필드 이름(식별자)의 연결로 구성돼요.
    • 첫 번째 필드 이름에는 앞의 마침표를 지정할 필요가 없어요.
    • 인덱스 연산자의 인덱스 값은 (배열의 경우) 음이 아닌 정수이거나 (객체 필드의 경우) 작은따옴표 또는 큰따옴표로 묶인 문자열 리터럴일 수 있어요.
    • 자세한 내용은 Querying Semi-structured Data를 참고해요.
  • 구문적 일관성을 유지하기 위해 경로 표기법은 SQL 스타일의 큰따옴표로 묶인 식별자와 경로 구분 기호로 : 사용을 지원해요.

예시

테이블을 만들고 값을 삽입해요.

CREATE TABLE demo1 (id INTEGER, json_data VARCHAR);
INSERT INTO demo1 SELECT
   1, '{"level_1_key": "level_1_value"}';
INSERT INTO demo1 SELECT
   2, '{"level_1_key": {"level_2_key": "level_2_value"}}';
INSERT INTO demo1 SELECT
   3, '{"level_1_key": {"level_2_key": ["zero", "one", "two"]}}';

JSON_EXTRACT_PATH_TEXT를 사용해 간단한 1-레벨 문자열에서 값을 추출해요.

SELECT 
        TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key')) 
            AS OLD_WAY,
        JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key')
            AS JSON_EXTRACT_PATH_TEXT
    FROM demo1
    ORDER BY id;
+--------------------------------------+--------------------------------------+
| OLD_WAY                              | JSON_EXTRACT_PATH_TEXT               |
|--------------------------------------+--------------------------------------|
| level_1_value                        | level_1_value                        |
| {"level_2_key":"level_2_value"}      | {"level_2_key":"level_2_value"}      |
| {"level_2_key":["zero","one","two"]} | {"level_2_key":["zero","one","two"]} |
+--------------------------------------+--------------------------------------+

2-레벨 경로를 사용해 2-레벨 문자열에서 값을 추출해요.

SELECT 
        TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key.level_2_key'))
            AS OLD_WAY,
        JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key.level_2_key')
            AS JSON_EXTRACT_PATH_TEXT
    FROM demo1
    ORDER BY id;
+----------------------+------------------------+
| OLD_WAY              | JSON_EXTRACT_PATH_TEXT |
|----------------------+------------------------|
| NULL                 | NULL                   |
| level_2_value        | level_2_value          |
| ["zero","one","two"] | ["zero","one","two"]   |
+----------------------+------------------------+

이 예시는 배열을 포함해요.

SELECT 
      TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key.level_2_key[1]'))
          AS OLD_WAY,
      JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key.level_2_key[1]')
          AS JSON_EXTRACT_PATH_TEXT
    FROM demo1
    ORDER BY id;
+---------+------------------------+
| OLD_WAY | JSON_EXTRACT_PATH_TEXT |
|---------+------------------------|
| NULL    | NULL                   |
| NULL    | NULL                   |
| one     | one                    |
+---------+------------------------+

더 알아보기