Truy vấn dữ liệu JSON bằng Postgres

Giới thiệu về NoSQL

Jake Roach

Data Engineer

Truy vấn dữ liệu JSON với Postgres

Hai bảng: một có một cột kiểu JSON, và một có kết quả truy vấn trích xuất thông tin từ cột parent_meta.

Toán tử ->

  • Nhận key, trả về trường dạng JSON

Toán tử ->>

  • Nhận key, trả về trường dạng văn bản

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
Giới thiệu về NoSQL

Truy vấn đối tượng JSON lồng nhau

Hai bảng: một có một cột kiểu JSON, và một có kết quả truy vấn trích xuất thông tin từ cột parent_meta.

Truy vấn đối tượng JSON lồng nhau:

  • Dùng kết hợp ->->>
  • Trả về đối tượng lồng nhau trước
  • Sau đó trích xuất trường

$$

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;
Giới thiệu về NoSQL

Truy vấn mảng JSON

Hai bảng: một có một cột kiểu JSON, và một có kết quả truy vấn trích xuất thông tin từ cột parent_meta.

Truy cập phần tử mảng JSON:

  • Truyền một INT vào ->, trả về trường dạng JSON
  • Truyền một INT vào ->>, trả về trường dạng văn bản

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
Giới thiệu về NoSQL

Xác định kiểu dữ liệu trong đối tượng JSON

Hai bảng: một có một cột kiểu JSON, và một có kiểu của đối tượng JSON đầu ra trong một cột.

Hàm json_typeof

  • Trả về kiểu của đối tượng ngoài cùng
  • Dùng với ->
  • Hữu ích để gỡ lỗi, xây dựng truy vấn
  • Thường không dùng với toán tử ->>

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
Giới thiệu về NoSQL

Ôn tập

SELECT
    -- Trường cấp cao nhất
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- Trường lồng nhau
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

    -- Mảng
    <column-name> -> '<parent-field-name>' -> 0 AS <alias>,
    <column-name> -> '<parent-field-name>' ->> 1 AS <alias>,

    -- Kiểu dữ liệu
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
Giới thiệu về NoSQL

Ayo berlatih!

Giới thiệu về NoSQL

Preparing Video For Download...