Fråga JSON-data med Postgres

Introduktion till NoSQL

Jake Roach

Data Engineer

Fråga JSON-data med Postgres

Två tabeller: en med en enda kolumn av typen JSON och en med resultatet av frågan som hämtar information från kolumnen parent_meta.

Operatorn ->

  • Tar en nyckel, returnerar fältet som JSON

Operatorn ->>

  • Tar en nyckel, returnerar fältet som text

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
Introduktion till NoSQL

Fråga nästlade JSON-objekt

Två tabeller: en med en enda kolumn av typen JSON och en med resultatet av frågan som hämtar information från kolumnen parent_meta.

Fråga nästlade JSON-objekt:

  • Kombinera -> och ->>
  • Returnera först det nästlade objektet
  • Extrahera sedan fältet

$$

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

Fråga JSON-arrayer

Två tabeller: en med en enda kolumn av typen JSON och en med resultatet av frågan som hämtar information från kolumnen parent_meta.

Åtkomst till JSON-arrayelement:

  • Skicka ett INT till -> – returnerar fältet som JSON
  • Skicka ett INT till ->> – returnerar fältet som text

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
Introduktion till NoSQL

Kontrollera datatypen i JSON-objekt

Två tabeller: en med en enda kolumn av typen JSON och en med typen för JSON-objektets utdata i en enda kolumn.

Funktionen json_typeof

  • Returnerar typen för det yttersta objektet
  • Används tillsammans med ->
  • Användbar vid felsökning och frågekonstruktion
  • Används vanligtvis inte med operatorn ->>

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
Introduktion till NoSQL

Sammanfattning

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>;
Introduktion till NoSQL

Nu kör vi en övning!

Introduktion till NoSQL

Preparing Video For Download...