高度なPostgresのJSONクエリ手法

NoSQL入門

Jake Roach

Data Engineer

入れ子のJSONデータをクエリする

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

$$

入れ子データのクエリを簡単にするには:

  • #>#>> 演算子
  • json_extract_pathjson_extract_path_text 関数
NoSQL入門

#> と #>> 演算子

2つのテーブル。1つ目はドキュメントデータ、2つ目はハッシュ矢印/二重矢印演算子で抽出した複数のフィールドを表示。

#> 演算子

  • 列に対して呼び出し、文字列配列を受け取る
  • パスが無い場合は null を返す
  • #>> はフィールドをテキストで返す

$$

SELECT
    parent_meta #> '{jobs}' AS jobs,
    parent_meta #> '{jobs, P1}' AS jobs_P1,
    parent_meta #> '{jobs, income}' AS income,
    parent_meta #>> '{jobs, P2}' AS jobs_P2
FROM student;
NoSQL入門

json_extract_path と json_extract_path_text

json_extract_path

  • 列と可変個のフィールドを指定
  • パスが無い場合は null を返す
  • json_extract_path_text

$$

SELECT
  json_extract_path(parent_meta, 'jobs') AS jobs,
  json_extract_path(parent_meta, 'jobs', 'P1') AS jobs_P1,
  json_extract_path(parent_meta, 'jobs', 'income') AS income,
  json_extract_path_text(parent_meta, 'jobs', 'P2') AS jobs_P2,
FROM student;

2つのテーブル。1つ目はドキュメントデータ、2つ目はjson_extract_path/json_extract_path_textで抽出した複数のフィールドを表示。

NoSQL入門

復習

SELECT
    <column-name> #> '{<field-name>}' AS <alias>,
    <column-name> #> '{<field-name>, <field-name>}' AS <alias>,
    <column-name> #>> '{<field-name>, <field-name>}' AS <alias>
FROM <table-name>;
SELECT
  json_extract_path(<column-name>, '<field-name>') AS <alias>,
  json_extract_path(<column-name>, '<field-name>', '<field-name>') AS <alias>,
  json_extract_path_text(<column-name>, '<field-name>', '<field-name>') AS <alias>
FROM <table-name>;
NoSQL入門

Let's practice!

NoSQL入門

Preparing Video For Download...