Démonstration de la fonctionnalité Tables de Cywise¶
Nous voulons faire une démonstration de notre nouvelle fonctionnalité Tables dans Cywise.
Ce que nous voulons montrer :
- l'ajout de tables depuis Azure
- en important ou non les données sur nos serveurs
- l'ajout d'une table virtuelle grâce à une requête SQL
- la génération automatique de cette requête SQL par le LLM
Réflexions¶
Nous voulons montrer les capacités du LLM à générer la requête SQL donc ce serait bien si nous avions 2 tables à joindre.
J'ai pensé à ce scénario : une table avec la liste des communes de France, une tables avec la population des communes de France. Ainsi nous pourrions faire une jointure sur le code commune (Code INSEE, pas code postal) afin, par exemple, de compter la population par département.
J'ai trouvé ces données ici : https://www.data.gouv.fr/fr/datasets/donnees-sur-les-communes-de-france-metropolitaine/.
Préparation des données¶
J'ai séparé le fichier CSV en 2 fichiers :
- communes_france.csv : Code Insee, Code postal, nom commune, département, région
- communes_population_france.csv : Code Insee, population 2015, population 2021
Puis j'ai converti ces 2 fichiers en 2 fichiers TSV (Tables de Cywise ne supporte que ce format pour l'instant)
Puis j'ai modifié les noms de colonne pour ne plus avoir d'espace ni d'accent :
- communes_france.csv : Code_Insee, Code_postal, nom_commune, departement, region
- communes_population_france.csv : Code_Insee, population_2015, population_2021
Suite au message d'erreur :
Code: 117. DB::Exception:
You have carriage return (\r, 0x0D, ASCII 13) at end of first row.
It's like your input data has DOS/Windows style line separators, that are illegal in TabSeparated format. You must transform your file to Unix format.
J'ai converti au format Unix mes 2 fichiers avec :
sudo apt-get install dos2unix
dos2unix communes_france.tsv
dos2unix communes_population_france.tsv
Import des fichiers dans Azure¶
Je me connecte à Azure (https://portal.azure.com) avec mon compte cywise.patrick@outlook.fr. Je vais dans la rubrique "Comptes de stockage" puis dans "cywiseimporttables". Enfin, je vais dans "Service BLOB" et je retrouve mes 3 conteneurs : cywise-in, cywise-out et cywise-test-1.
Je vais utiliser cywise-in et cywise-out pour notre démo. J'ai importé mes 2 fichiers TSV dans cywise-in/demo/.
Information à utiliser durant la démo¶
- Connection String : DefaultEndpointsProtocol=https;AccountName=cywiseimporttables;AccountKey=mp22Az02qWifweYeOO75Jm8v5teaOBnEkmqmLCCrUBWs9ml8k0c57WfaaZQpA2PX3N1XkqwT6pOt+ASthy/R0g==;EndpointSuffix=core.windows.net
- Input Folder : cywise-in/demo/
- Output Folder : cywise-out/demo/
Descriptions : - communes_france : Liste des communes de France. La colonne "Code Insee" est la clé unique de la commune. - communes_population_france : Population en 2015 et en 2021 des communes de France. La colonne "Code Insee" est la clé unique de la commune.
Table virtuelle : departements_population - Description : Pour chaque département de France, la population en 2015 et la population en 2021 - Demande LLM : Je voudrais, pour chaque département, la population de 2015 et de 2021 trié du département le plus peuplé au moins peuplé
Si le LLM ne convertit pas correctement les colonnes de la population de string vers float, ajouter cette consigne : "Il faut convertir les colonnes de la population en Float avec la méthode toFloat32."
Résultat :
SELECT
communes_france.DEPARTEMENT,
SUM(toFloat32(communes_population_france.POPULATION_2015)) AS TOTAL_POPULATION_2015,
SUM(toFloat32(communes_population_france.POPULATION_2021)) AS TOTAL_POPULATION_2021
FROM
communes_france
JOIN
communes_population_france ON communes_france.CODE_INSEE = communes_population_france.CODE_INSEE
GROUP BY
communes_france.DEPARTEMENT
ORDER BY
TOTAL_POPULATION_2021 DESC
Table virtuelle : commune_delta_pct - Description : Pour chaque commune, l'écart en pourcentage entre la population en 2015 et celle en 2021 - Demande LLM : Pour chaque commune, l'écart en pourcentage entre la population en 2015 et celle en 2021 trié de l'écart le plus grand à l'écart le plus petit. Avec l'écart arrondi à une décimale.
Résultat :
SELECT
c.NOM_COMMUNE,
c.CODE_INSEE,
cp.POPULATION_2015,
cp.POPULATION_2021,
( ( toFloat32(cp.POPULATION_2021) - toFloat32(cp.POPULATION_2015) ) / toFloat32(cp.POPULATION_2015) ) * 100 AS POURCENTAGE_ECART
FROM
communes_france c
JOIN
communes_population_france cp ON c.CODE_INSEE = cp.CODE_INSEE
ORDER BY
POURCENTAGE_ECART DESC
Déroulement de la démo¶
Vue d'ensemble de ce que je veux montrer : Je veux obtenir des données sur la population française. Connaître les départements les plus peuplés et connaître les communes qui ont le plus augmentées leur population.
Pour pouvoir faire ça, j'ai trouvé les informations sur les communes de France et aussi les informations sur la population de chaque commune en 2015 et en 2021. Les informations sont dans 2 fichiers TSV que j'ai importés dans un container Azure et je vais maintenant utiliser Cywise pour les manipuler.
Import des 2 TSV (physique)¶
Explications : j'ai un fichier TSV contenant la liste des communes de France et un autre fichier TSV contenant la population de chaque commune de France en 2015 et en 2021. Je vais d'abord importer ces 2 fichiers dans notre système Cywise puis je ferai des tables virtuelles pour manipuler ces données. Cela correspond au dépôt des fichiers que vous faites aujourd'hui sur le SFTP.
Import de la table communes_france (puis communes_population_france)
- mettre les crédentials d'Azure
- choisir la table
- choisir toutes les colonnes (déjà cochées par défaut)
- mettre la description :
- communes_france : Liste des communes de France. La colonne "Code Insee" est la clé unique de la commune.
- communes_population_france : Population en 2015 et en 2021 des communes de France. La colonne "Code Insee" est la clé unique de la commune.
Info Azure :
- Connection String : DefaultEndpointsProtocol=https;AccountName=cywiseimporttables;AccountKey=mp22Az02qWifweYeOO75Jm8v5teaOBnEkmqmLCCrUBWs9ml8k0c57WfaaZQpA2PX3N1XkqwT6pOt+ASthy/R0g==;EndpointSuffix=core.windows.net
- Input Folder : cywise-in/demo/
- Output Folder : cywise-out/demo/
Création des tables virtuelles (recombinaison)¶
Explications : je vais créer 2 tables vituelles en croissant les données des 2 TSV que je viens d'importer. Cela correspond à ce que vous faîtes aujourd'hui avec le job Jenkins JobToDataset.
Création de la table virtuelle departements_population - Description : Pour chaque département de France, la population en 2015 et la population en 2021 - Demande LLM : Je voudrais, pour chaque département, la population de 2015 et de 2021 trié du département le plus peuplé au moins peuplé
Si le LLM ne convertit pas correctement les colonnes de la population de string vers float, ajouter cette consigne : "Il faut convertir les colonnes de la population en Float avec la méthode toFloat32."
Création de la table virtuelle commune_delta_pct - Description : Pour chaque commune, l'écart en pourcentage entre la population en 2015 et celle en 2021 - Demande LLM : Pour chaque commune, l'écart en pourcentage entre la population en 2015 et celle en 2021 trié de l'écart le plus grand à l'écart le plus petit. Avec l'écart arrondi à une décimale.
Si le LLM ne convertit pas correctement les colonnes de la population de string vers float, ajouter cette consigne : "Il faut convertir les colonnes de la population en Float avec la méthode toFloat32."
Questions pour Cyrille :
- si je coche "Matérialiser", les données sont stockées dans Clickhouse ? Pourrait-on les stocker dans Azure ?
- les données manipulées par Clickhouse sont, au moins temporairement, stockées sur le serveur Clickhouse. Pour la démo c'est le nôtre sur Swarm01 mais on pourrait utiliser celui d'ISTA sur yunohost-ista-dev ou yunohost-ista-prod, non ?