UsageError: %%sql is a cell magic, but the cell body is empty. Did you mean the line magic %sql (single %)?
%% Cell type:markdown id: tags:
Quelles sont les propriétés d'une `geography` ?
%% Cell type:code id: tags:
``` python
%%sql
```
%% Cell type:markdown id: tags:
Afficher toutes les régions distinctes
%% Cell type:code id: tags:
``` python
%%sql
```
%% Cell type:markdown id: tags:
Combien y a-t-il de régions ?
%% Cell type:code id: tags:
``` python
%%sql
```
%% Cell type:markdown id: tags:
## De SQL à JSON
%% Cell type:markdown id: tags:
Ecrire, à partir des relations `city` et `country` une requête qui retourne cinq villes et leur pays (sous la forme de simples chaînes de caractères).
Le résultat est une table (un multi-ensemble de tuples).
%% Cell type:code id: tags:
``` python
%%sql
```
%% Cell type:markdown id: tags:
Réécrire la requête afin de retourner des documents JSON.
Quelques fonctions intéressantes :
*`JSON_OBJECT(key, val[, key, val] ...])` retourne un objet JSON défini par les paires `key: val` fournies en paramètre (la notation avec des crochets et les points de suspension indique que les deux paramètres peuvent être répétés).
*`JSON_ARRAY(val [, val] ...)` retourne un tableau JSON selon le même principe.
%% Cell type:code id: tags:
``` python
%%sql
```
%% Cell type:markdown id: tags:
## De JSON à SQL (optionnel)
%% Cell type:markdown id: tags:
Ecrire une requête qui retourne une table donnant la superficie de chacune des régions répertoriées dans la relation `countryinfo`, classée par superficie croissante.
Une fonction intéressante :
*`JSON_TABLE(doc, path COLUMNS (name type PATH path[, name type PATH path] ...)) [AS] alias` retourne à partir du composant de `doc` au bout du chemin `path` une table nommée `alias` dont les colonnes sont spécifiées à l'aide des paramètres de `COLUMNS` (le chemin `path` des colonnes complète le chemin initial).
Conseil:
* faire un produit de `countryinfo` et `JSON_TABLE(doc...)` pour obtenir le document associé à chaque tuple de `countryinfo` ;
* commencer par simplement construire une table reprenant les régions et les superficies de chaque tuple/pays.
%% Cell type:code id: tags:
``` python
%%sql
```
%% Cell type:code id: tags:
``` python
%%sql
```
%% Cell type:markdown id: tags:
## MongoDB
%% Cell type:markdown id: tags:
En premier, exécutez le tutoriel présent à cette adresse : https://www.mongodb.com/docs/manual/tutorial/getting-started/.
Ceci vous permettra d'avoir une vue sur les principales commandes de MongoDB :
Vous allez copier le contenu de la table `countryinfo` (champ `doc` bien sûr) dans MongoDB à l'aide de la bibliothèque [pymongo](https://pymongo.readthedocs.io/en/stable/).
Lisez le tutoriel [Pymongo](https://pymongo.readthedocs.io/en/stable/tutorial.html) pour avoir une idée générale du fonctionnement.
Conseils:
* utilisez les DataFrame de Pandas
* utilisez `json.loads` et `to_numpy()` ("Convert the DataFrame to a NumPy array") pour transformer la base en tableau de dictionnaires
* connectez-vous à la base `mongo` (regardez dans le `docker-compose.yml` comment c'est configuré) créez la base "world_x" et la collection "doc"
Vérifiez bien que vous obtenez autant qu'avec MySQL (239 documents).
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Affichez la liste (limitée à 5 résultats) indiquant le nom, l'année d'indépendance et les informations démographiques pour les pays dont l'année d'indépendance est supérieure à 1980.
Regardez la [fonction `find`](https://www.mongodb.com/docs/manual/tutorial/query-documents/)
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Affichez la liste (limitée à 5 résultats) indiquant le nom, l'année d'indépendance et la population pour les pays dont le nombre d'habitant est supérieure à 3 millions.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Ecrivez une requête affichant la somme des superficies pour chacune des régions. Pour cela il faut grouper les pays de la même région du monde.
Regardez du côté de la [commande `aggregate`](https://www.mongodb.com/docs/manual/aggregation/).
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Complétez la requête précédente en classant par superficie croissante.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Affichez les superficies par région avec Seaborn (utilisez `catplot` en mode `bar`).
Pour transformer le tableau de résultats en DataFrame, vous pouvez utiliser `pd.json_normalize`.