Query data JSON dengan Postgres

Pengantar NoSQL

Jake Roach

Data Engineer

Query data JSON dengan Postgres

Dua tabel: satu berisi satu kolom bertipe JSON, dan satu lagi berisi hasil query yang mengekstrak informasi dari kolom parent_meta.

Operator ->

  • Menerima key, mengembalikan field sebagai JSON

Operator ->>

  • Menerima key, mengembalikan field sebagai teks

$$

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

Query objek JSON bertingkat

Dua tabel: satu berisi satu kolom bertipe JSON, dan satu lagi berisi hasil query yang mengekstrak informasi dari kolom parent_meta.

Untuk mengquery objek JSON bertingkat:

  • Gunakan -> dan ->> bersama
  • Pertama, kembalikan objek bertingkat
  • Lalu, ekstrak field-nya

$$

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

Query array JSON

Dua tabel: satu berisi satu kolom bertipe JSON, dan satu lagi berisi hasil query yang mengekstrak informasi dari kolom parent_meta.

Mengakses elemen array JSON:

  • Beri INT ke ->, mengembalikan JSON
  • Beri INT ke ->>, mengembalikan teks

$$

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

Menemukan tipe data dalam objek JSON

Dua tabel: satu berisi satu kolom bertipe JSON, dan satu lagi berisi tipe objek JSON yang dihasilkan dalam satu kolom.

Fungsi json_typeof

  • Mengembalikan tipe objek terluar
  • Gunakan dengan ->
  • Berguna untuk debug dan membangun query
  • Biasanya tidak dipakai dengan operator ->>

$$

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

Ringkasan

SELECT
    -- Field level teratas
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- Field bertingkat (nested)
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

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

    -- Tipe
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
Pengantar NoSQL

Ayo berlatih!

Pengantar NoSQL

Preparing Video For Download...