Interroger des données JSON avec Postgres

Introduction à NoSQL

Jake Roach

Data Engineer

Interroger des données JSON avec Postgres

Deux tables : l'une avec une seule colonne de type JSON, l'autre avec le résultat de la requête extrayant des informations de la colonne parent_meta.

Opérateur ->

  • Prend une clé, renvoie le champ en JSON

Opérateur ->>

  • Prend une clé, renvoie le champ en texte

$$

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

Interroger des objets JSON imbriqués

Deux tables : l'une avec une seule colonne de type JSON, l'autre avec le résultat de la requête extrayant des informations de la colonne parent_meta.

Pour interroger des objets JSON imbriqués :

  • Utilisez -> et ->> ensemble
  • D'abord, retourner l'objet imbriqué
  • Puis extraire le champ

$$

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

Interroger des tableaux JSON

Deux tables : l'une avec une seule colonne de type JSON, l'autre avec le résultat de la requête extrayant des informations de la colonne parent_meta.

Accéder aux éléments d'un tableau JSON :

  • Passer un INT à -> renvoie le champ en JSON
  • Passer un INT à ->> renvoie le champ en texte

$$

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

Identifier le type de données stocké dans les objets JSON

Deux tables : l'une avec une seule colonne de type JSON, l'autre avec en sortie le type de l'objet JSON dans une seule colonne.

Fonction json_typeof

  • Renvoie le type de l'objet le plus externe
  • À utiliser avec ->
  • Utile pour le débogage et construire des requêtes
  • En général, pas utilisée avec l'opérateur ->>

$$

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

Récapitulatif

SELECT
    -- Champs de premier niveau
    <column-name> -> '<field-name>' AS <alias>,
    <column-name> ->> '<field-name>' AS <alias>,

    -- Champs imbriqués
    <column-name> -> '<parent-field-name>' ->> '<nested-field-name>' AS <alias>,

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

    -- Type de
    json_typeof(<column-name> -> <field-name>) AS <alias>
FROM <table-name>;
Introduction à NoSQL

Passons à la pratique !

Introduction à NoSQL

Preparing Video For Download...