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...