Dotazování na data JSON v Postgresu

Úvod do NoSQL

Jake Roach

Data Engineer

Dotazování na data JSON v Postgresu

Dvě tabulky: jedna se sloupcem typu JSON, druhá s výsledkem dotazu extrahujícího data ze sloupce parent_meta.

Operátor ->

  • Přijímá klíč, vrací pole jako JSON

Operátor ->>

  • Přijímá klíč, vrací pole jako text

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
Úvod do NoSQL

Dotazování na vnořené objekty JSON

Dvě tabulky: jedna se sloupcem typu JSON, druhá s výsledkem dotazu extrahujícího data ze sloupce parent_meta.

Dotazování na vnořené objekty JSON:

  • Kombinujte -> a ->>
  • Nejprve vraťte vnořený objekt
  • Poté extrahujte pole

$$

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;
Úvod do NoSQL

Dotazování na pole JSON

Dvě tabulky: jedna se sloupcem typu JSON, druhá s výsledkem dotazu extrahujícího data ze sloupce parent_meta.

Přístup k prvkům pole JSON:

  • Předání INT do -> vrátí pole jako JSON
  • Předání INT do ->> vrátí pole jako text

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
Úvod do NoSQL

Zjištění typu dat uložených v objektech JSON

Dvě tabulky: jedna se sloupcem typu JSON, druhá s typem výstupního objektu JSON v jednom sloupci.

Funkce json_typeof

  • Vrátí typ nejvyššího objektu
  • Použití s ->
  • Užitečné pro ladění a tvorbu dotazů
  • Obvykle se nepoužívá s operátorem ->>

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
Úvod do NoSQL

Přehled

SELECT
    -- Top-level fields
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- Nested fields
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

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

    -- Type of
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
Úvod do NoSQL

Pojďme si to procvičit!

Úvod do NoSQL

Preparing Video For Download...