Запити до даних JSON у Postgres

Вступ до NoSQL

Jake Roach

Data Engineer

Запити до JSON у Postgres

Дві таблиці: одна містить єдиний стовпець типу JSON, інша — результат запиту, що витягує дані зі стовпця parent_meta.

Оператор ->

  • Приймає ключ, повертає поле як JSON

Оператор ->>

  • Приймає ключ, повертає поле як текст

$$

SELECT
    parent_meta -> 'guardian' AS guardian
    parent_meta ->> 'status' AS status
FROM student;
Вступ до NoSQL

Запити до вкладених обʼєктів JSON

Дві таблиці: одна містить єдиний стовпець типу JSON, інша — результат запиту, що витягує дані зі стовпця parent_meta.

Як запитувати вкладені обʼєкти JSON:

  • Використовуйте -> і ->> разом
  • Спочатку поверніть вкладений обʼєкт
  • Потім витягніть поле

$$

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;
Вступ до NoSQL

Запити до масивів JSON

Дві таблиці: одна містить єдиний стовпець типу JSON, інша — результат запиту, що витягує дані зі стовпця parent_meta.

Доступ до елементів масиву JSON:

  • Передайте INT до ->, щоб отримати поле як JSON
  • Передайте INT до ->>, щоб отримати поле як текст

$$

SELECT
    parent_meta -> 'educations' ->> 0
    parent_meta -> 'educations' ->> 1
FROM student;
Вступ до NoSQL

Визначення типу даних у JSON-обʼєктах

Дві таблиці: одна містить єдиний стовпець типу JSON, інша — тип JSON-обʼєкта у вигляді одного стовпця.

Функція json_typeof

  • Повертає тип найзовнішнього обʼєкта
  • Використовуйте з ->
  • Корисна для налагодження й побудови запитів
  • Зазвичай не використовують з оператором ->>

$$

SELECT
    json_typeof(parent_meta -> 'jobs')
FROM students;
Вступ до NoSQL

Підсумок

SELECT
    -- Поля верхнього рівня
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- Вкладені поля
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

    -- Масиви
    <column-name> -> '<parent-field-name>' -> 0 AS <alias>,
    <column-name> -> '<parent-field-name>' ->> 1 AS <alias>,

    -- Тип
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
Вступ до NoSQL

Давайте потренуємось!

Вступ до NoSQL

Preparing Video For Download...