理解 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_jsonjson_to_record
  • ->->>#>#>> 運算子
  • json_extract_pathjson_extract_path_text

你也能:

  • 將 JSON 格式的記錄插入 Postgres 資料表
  • 表格轉 JSON、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...