Interogarea datelor JSON în Postgres

Introducere în NoSQL

Jake Roach

Data Engineer

Interogarea datelor JSON cu Postgres

Două tabele: unul cu o singură coloană de tip JSON și celălalt cu rezultatul interogării care extrage informații din coloana parent_meta.

Operatorul ->

  • Primește o cheie, returnează câmpul ca JSON

Operatorul ->>

  • Primește o cheie, returnează câmpul ca text

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
Introducere în NoSQL

Interogarea obiectelor JSON imbricate

Două tabele: unul cu o singură coloană de tip JSON și celălalt cu rezultatul interogării care extrage informații din coloana parent_meta.

Interogarea obiectelor JSON imbricate:

  • Se utilizează -> și ->> în combinație
  • Mai întâi, se returnează obiectul imbricat
  • Apoi, se extrage câmpul dorit

$$

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;
Introducere în NoSQL

Interogarea array-urilor JSON

Două tabele: unul cu o singură coloană de tip JSON și celălalt cu rezultatul interogării care extrage informații din coloana parent_meta.

Accesarea elementelor dintr-un array JSON:

  • Se transmite un INT la ->, returnează câmpul ca JSON
  • Se transmite un INT la ->>, returnează câmpul ca text

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
Introducere în NoSQL

Determinarea tipului datelor stocate în obiecte JSON

Două tabele: unul cu o singură coloană de tip JSON și celălalt cu tipul obiectului JSON în o singură coloană.

Funcția json_typeof

  • Returnează tipul obiectului de la nivel superior
  • Se utilizează cu ->
  • Utilă pentru depanare și construirea interogărilor
  • De obicei nu se utilizează cu operatorul ->>

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
Introducere în NoSQL

Recapitulare

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>;
Introducere în NoSQL

Să exersăm!

Introducere în NoSQL

Preparing Video For Download...