Interroger des données JSON avec Postgres

Introduction à NoSQL

Jake Roach

Data Engineer

Interroger des données JSON avec Postgres

Deux tableaux : l'un avec une seule colonne de type JSON, l'autre avec le résultat de la requête qui extrait l'information 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 tableaux : l'un avec une seule colonne de type JSON, l'autre avec le résultat de la requête qui extrait l'information de la colonne parent_meta.

Pour interroger des objets JSON imbriqués :

  • Utilisez -> et ->> ensemble
  • D'abord, retournez l'objet imbriqué
  • Puis, extrayez 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 tableaux : l'un avec une seule colonne de type JSON, l'autre avec le résultat de la requête qui extrait l'information de la colonne parent_meta.

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

  • Passez un INT à ->, renvoie le champ en JSON
  • Passez 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 dans des objets JSON

Deux tableaux : l'un avec une seule colonne de type JSON, l'autre avec, dans une seule colonne, le type de l'objet JSON produit.

Fonction json_typeof

  • Retourne le type de l'objet le plus externe
  • À utiliser avec ->
  • Utile pour le débogage et bâtir des requêtes
  • Rarement utilisée avec l'opérateur ->>

$$

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

Révision

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...