-- petits tests préalables select * from 'pypi_issues.03.json'; select unnest(labels) from 'pypi_issues.03.json'; -- Recréer un document json par élément dans le json de départ -- Si on veut refaire une liste pour avoir un seul gros doc json -- il suffit de mettre le to_json à l'intérieur d'un json_group_array with labels as ( select id, unnest(labels) as l from 'pypi_issues.03.json' ), lbls_tr as ( select id, array_agg({ id: l.id, name: l.name }) as lbls from labels group by id ) select to_json( { id: j.id, number: number, state: state, user: { login: user.login, id: user.id }, labels: lbls, created_at: created_at, closed_at: closed_at } ) as tr from 'pypi_issues.03.json' j join lbls_tr on j.id = lbls_tr.id; -- Peut-être plus intéressant si on veut travailler en vue de faire des stats: convertir le contenu en tables relationnelles -- DuckDB possède un type list (~= array en postgres) et un struct et va mapper directement les structures json sur ces types lors de la lecture du fichier. -- Pour les structures imbriquées comme user, on accède facilement au valeurs avec le '.' -- Pour les listes selon l'usage, il peut être intéressant de créer une ligne pour chaque élément du tableau (cf table labels) -- -- Une table pour les issues drop table if exists issues; create table issues as select * from 'pypi_issues.03.json'; -- Récupérer la liste des logins (accès à la structure dans le champ user) select distinct i.user.login as login from issues i; -- Une table labels qui associe chaque label l'id de l'issue concernée -- Remarque: les labels sont déjà dans la table issues, mais dans un tableau -- la table ci-dessous permet de travailler directement sur les issues drop table if exists labels; create table labels as select id as issue_id, label.* from ( select id, unnest(labels) as label from issues ) sl;