การคิวรีข้อมูล JSON ด้วย Postgres

NoSQL เบื้องต้น

Jake Roach

Data Engineer

การคิวรีข้อมูล JSON ด้วย Postgres

ตารางสองตาราง ตารางหนึ่งมีคอลัมน์เดียวชนิด JSON และอีกตารางแสดงผลลัพธ์ของคิวรีที่ดึงข้อมูลจากคอลัมน์ parent_meta

ตัวดำเนินการ ->

  • รับ key และคืนค่าฟิลด์เป็น JSON

ตัวดำเนินการ ->>

  • รับ key และคืนค่าฟิลด์เป็น text

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
NoSQL เบื้องต้น

การคิวรี JSON object ที่ซ้อนกัน

ตารางสองตาราง ตารางหนึ่งมีคอลัมน์เดียวชนิด JSON และอีกตารางแสดงผลลัพธ์ของคิวรีที่ดึงข้อมูลจากคอลัมน์ parent_meta

การคิวรี JSON object ที่ซ้อนกัน:

  • ใช้ -> และ ->> ร่วมกัน
  • ขั้นแรก ดึง object ที่ซ้อนอยู่
  • จากนั้น ดึงค่าของฟิลด์

$$

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;
NoSQL เบื้องต้น

การคิวรี JSON array

ตารางสองตาราง ตารางหนึ่งมีคอลัมน์เดียวชนิด JSON และอีกตารางแสดงผลลัพธ์ของคิวรีที่ดึงข้อมูลจากคอลัมน์ parent_meta

การเข้าถึงสมาชิกใน JSON array:

  • ส่ง INT ให้ -> เพื่อคืนค่าเป็น JSON
  • ส่ง INT ให้ ->> เพื่อคืนค่าเป็น text

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
NoSQL เบื้องต้น

การตรวจสอบประเภทข้อมูลใน JSON object

ตารางสองตาราง ตารางหนึ่งมีคอลัมน์เดียวชนิด JSON และอีกตารางแสดงประเภทของ JSON object ในคอลัมน์เดียว

ฟังก์ชัน json_typeof

  • คืนค่าประเภทของ object ชั้นนอกสุด
  • ใช้ร่วมกับ ->
  • มีประโยชน์สำหรับการดีบักและสร้างคิวรี
  • โดยทั่วไปไม่ใช้กับตัวดำเนินการ ->>

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
NoSQL เบื้องต้น

ทบทวน

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>;
NoSQL เบื้องต้น

มาฝึกกันเถอะ!

NoSQL เบื้องต้น

Preparing Video For Download...