반정형 데이터 처리

Snowflake SQL 입문

George Boorman

Senior Curriculum Manager, DataCamp

정형 vs 반정형

정형 데이터 예시

| cust_id | cust_name | cust_age | cust_email            |
|---------|-----------|----------|-----------------------|
| 1       | cust1     | 40       | cust1***@gmail.com    |
| 2       | cust2     | 35       | cust2***@gmail.com    |
| 3       | cust3     | 42       | cust3***@gmail.com    |

반정형 데이터 예시

고객 반정형 데이터(JSON), 고객 2는 이메일 2개 보유

Snowflake SQL 입문

JSON 소개

  • JavaScript Object Notation
  • 주요 사용처: 웹 API, 설정 파일
  • JSON 데이터 구조:
    • 키-값 쌍, 예: cust_id: 1

고객 JSON 예시: 고객 id, 이름, 나이, 이메일

Snowflake SQL 입문

Snowflake의 JSON

  • JSON 기본 지원
  • 변화하는 스키마에 유연함

 

비교:

  • Postgres: JSONB 사용
  • Snowflake: VARIANT 사용
Snowflake SQL 입문

Snowflake의 JSON 저장 방식

  • VARIANT는 OBJECT와 ARRAY 타입을 지원
    • OBJECT: { "key": "value"}
    • ARRAY: ["list", "of", "values"]
  • JSON 처리를 위한 Snowflake 테이블 생성
    CREATE TABLE cust_info_json_data (
      customer_id INT, 
      customer_info VARIANT -- VARIANT data type
    );
    
Snowflake SQL 입문

반정형 데이터 함수

  • PARSE_JSON

    • expr: 문자열 형식의 JSON 데이터
    • 반환: VARIANT 타입, 유효한 JSON 객체
Snowflake SQL 입문

PARSE_JSON

예시:

SELECT PARSE_JSON(
  -- 문자열로 감쌈      
  '{
  "cust_id": 1,
  "cust_name": "cust1",
  "cust_age": 40,
  "cust_email":"cust1***@gmail.com"
  }
  '-- 문자열로 감쌈
) AS customer_info_json

PARSE_JSON 결과

Snowflake SQL 입문

OBJECT_CONSTRUCT

  • OBJECT_CONSTRUCT

    • 구문: OBJECT_CONSTRUCT( [<key1>, <value1> [, <keyN>, <valueN> ...]] )
    • 반환: JSON 객체
    SELECT OBJECT_CONSTRUCT(
      -- : 표기 대신 쉼표로 구분
          'cust_id', 1,
          'cust_name', 'cust1',
          'cust_age', 40,
          'cust_email', 'cust1***@gmail.com'
    )

`customer_info` 열에 JSON 형식으로 저장된 테이블

Snowflake SQL 입문

Snowflake에서 JSON 데이터 조회

단순 JSON

  • :
    SELECT
      customer_info:cust_age, -- 열에서 cust_age 접근에 콜론 사용
      customer_info:cust_name,
      customer_info:cust_email,
    FROM 
      cust_info_json_data;
    

쿼리 결과: 고객 나이, 이름, 이메일이 별도 열로 표시

Snowflake SQL 입문

Snowflake에서 중첩 JSON 조회

중첩 JSON 예시

address가 street, city, state 키-값을 가진 객체인 중첩 JSON 데이터

  • 콜론: :
  • 점: .
Snowflake SQL 입문

콜론/점 표기법으로 중첩 JSON 조회

콜론 표기법으로 값 접근

<column>:<level1_element>:<level2_element>:<level3_element>

SELECT 
    customer_info:address:street AS street_name 
FROM 
    cust_info_json_data

street_name을 보여주는 쿼리 결과

점 표기법으로 값 접근

<column>:<level1_element>.<level2_element>.<level3_element>

SELECT
    customer_info:address.street AS street_name
FROM
    cust_info_json_data

street_name을 보여주는 쿼리 결과

Snowflake SQL 입문

연습해 봅시다!

Snowflake SQL 입문

Preparing Video For Download...