Postgres에서 JSON 데이터 이해하기

NoSQL 입문

Jake Roach

Data Engineer

Postgres의 JSON과 JSONB

{
    'guardian': 'mother',
    'status': 'A',
    'educations': [4, 4],
    'jobs': {
        'P1': 'teacher',
        'P2': 'at_home'
    }
}
CREATE TABLE students
    <column-name> JSON,
    <column-bame> JSONB
;

JSON

  • JSON 형식으로 데이터 저장
  • 키-값 쌍, 배열, 중첩 객체

$$

JSONB

  • 데이터를 이진 형식으로 저장
  • MongoDB의 BSON과 유사
  • 저장·조회 더 효율적
  • 추가 인덱싱 가능
NoSQL 입문

왜 Postgres에서 반정형 데이터를 사용하나요?

JSON 타입 열이 있는 Postgres 테이블.

NoSQL 입문

Postgres로 JSON 데이터 질의하기

SELECT
    address,
    famsize,
    ...
FROM students
[WHERE | GROUP BY | ORDER BY];

$$

  • row_to_json, json_to_record
  • ->, ->>, #>, #>> 연산자
  • json_extract_path, json_extract_path_text

또한 다음이 가능합니다:

  • JSON 형식 레코드를 Postgres 테이블에 삽입
  • 표↔JSON 상호 변환
  • JSON 객체에서 개별 레코드 추출
NoSQL 입문

sqlalchemy와 pandas로 쿼리 실행

import sqlalchemy
import pandas as pd
# Create a connection
db_engine = sqlalchemy.create_engine(
    "postgresql+psycopg2://<user>:<password>@<host>:5432/<database>"
)
# Write a query
query = "SELECT * FROM table_name;"
# Execute the query, show results
results = pd.read_sql(query, db_engine)
NoSQL 입문

연습해 봅시다!

NoSQL 입문

Preparing Video For Download...