Postgres で JSON データをクエリする

NoSQL入門

Jake Roach

Data Engineer

Postgres で JSON データをクエリする

2 つのテーブル。1 つは JSON 型の単一列、もう 1 つは parent_meta 列から情報を抽出するクエリ結果。

-> 演算子

  • キーを取り、フィールドを JSON で返す

->> 演算子

  • キーを取り、フィールドをテキストで返す

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
NoSQL入門

ネストした JSON オブジェクトのクエリ

2 つのテーブル。1 つは JSON 型の単一列、もう 1 つは parent_meta 列から情報を抽出するクエリ結果。

ネストした JSON オブジェクトをクエリするには:

  • ->->> を組み合わせる
  • まずネストしたオブジェクトを取得
  • 次にフィールドを抽出

$$

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;
NoSQL入門

JSON 配列のクエリ

2 つのテーブル。1 つは JSON 型の単一列、もう 1 つは parent_meta 列から情報を抽出するクエリ結果。

JSON 配列要素へのアクセス:

  • ->INT を渡すと JSON で返す
  • ->>INT を渡すとテキストで返す

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
NoSQL入門

JSON オブジェクトに格納されたデータ型を調べる

2 つのテーブル。1 つは JSON 型の単一列、もう 1 つは JSON オブジェクトの型を単一列に出力したもの。

json_typeof 関数

  • 最外層オブジェクトの型を返す
  • -> と併用
  • デバッグやクエリ作成に有用
  • 通常は ->> とは併用しない

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
NoSQL入門

復習

SELECT
    -- トップレベルのフィールド
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- ネストしたフィールド
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

    -- 配列
    <column-name> -> '<parent-field-name>' -> 0 AS <alias>,
    <column-name> -> '<parent-field-name>' ->> 1 AS <alias>,

    -- 型の取得
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
NoSQL入門

練習しましょう!

NoSQL入門

Preparing Video For Download...