Zapytania do danych JSON w Postgres

Wprowadzenie do NoSQL

Jake Roach

Data Engineer

Zapytania do danych JSON w Postgres

Dwie tabele: jedna z pojedynczą kolumną typu JSON, druga z wynikiem zapytania wyodrębniającego dane z kolumny parent_meta.

Operator ->

  • Przyjmuje klucz, zwraca pole jako JSON

Operator ->>

  • Przyjmuje klucz, zwraca pole jako tekst

$$

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

Zapytania do zagnieżdżonych obiektów JSON

Dwie tabele: jedna z pojedynczą kolumną typu JSON, druga z wynikiem zapytania wyodrębniającego dane z kolumny parent_meta.

Zapytania do zagnieżdżonych obiektów JSON:

  • Używaj -> i ->> łącznie
  • Najpierw zwróć obiekt zagnieżdżony
  • Następnie wyodrębnij pole

$$

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

Zapytania do tablic JSON

Dwie tabele: jedna z pojedynczą kolumną typu JSON, druga z wynikiem zapytania wyodrębniającego dane z kolumny parent_meta.

Dostęp do elementów tablic JSON:

  • Przekaż INT do ->, zwraca pole jako JSON
  • Przekaż INT do ->>, zwraca pole jako tekst

$$

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

Określanie typu danych w obiektach JSON

Dwie tabele: jedna z pojedynczą kolumną typu JSON, druga z typem obiektu JSON w pojedynczej kolumnie.

Funkcja json_typeof

  • Zwraca typ najbardziej zewnętrznego obiektu
  • Używana z ->
  • Przydatna do debugowania i budowania zapytań
  • Zazwyczaj nie używana z operatorem ->>

$$

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

Podsumowanie

SELECT
    -- Pola najwyższego poziomu
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- Pola zagnieżdżone
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

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

    -- Typ obiektu
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
Wprowadzenie do NoSQL

Czas na ćwiczenia!

Wprowadzenie do NoSQL

Preparing Video For Download...