Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposition de fiche duckdb #512

Merged
merged 22 commits into from
May 27, 2024
Merged

Proposition de fiche duckdb #512

merged 22 commits into from
May 27, 2024

Conversation

linogaliana
Copy link
Contributor

* Create Fiche_duckdb.qmd

* Update Fiche_duckdb.qmd

* Fiche duckdb : fin

* Update 03_Fiches_thematiques/Fiche_duckdb.qmd

Co-authored-by: Olivier Meslin <[email protected]>

* Apply suggestions from code review

Co-authored-by: Olivier Meslin <[email protected]>

* Update Fiche_duckdb.qmd

* Apply suggestions from code review

Co-authored-by: Pierre Lamarche <[email protected]>

* Restructuration + commentaires de P Lamarche

Aussi : ajout à la liste des contributeurs (suggestion d'Olivier Meslin)

* Nuancer sur le volume de données

* Compléter les conseils

* Précision

* Mettre un nom plus signifiant pour la connexion duckdb

* Les backticks c'est la vie

* L'italique aussi c'est la vie

* Amélioration de la présentation du chargement des données

* Reformulations

* Les majuscules c'est la vie

* Update Fiche_duckdb.qmd

---------

Co-authored-by: Olivier Meslin <[email protected]>
Co-authored-by: Pierre Lamarche <[email protected]>
Co-authored-by: Olivier Meslin <[email protected]>
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved

**Utilisation de la mémoire vive**

Comme expliqué plus haut, les objets manipulés dans cette fiche sont des requêtes SQL, et ne nécessitent pas de mémoire vive. Les données déclarées par `read_parquet` sont stockées sur le disque dur, lues à la demande, et "oubliées" à la fin du calcul. On retourne le _résultat_ du calcul.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce paragraphe (et certains autres passages) me semblent donner l'impression que lorsque duckdb travaille à partir d'un fichier Parquet, tout se passe sur le disque sans passage par la mémoire. Or si c'est clair que duckdb optimise très fortement la quantité de données utilisées avec les filtres pushdown & co, il y a bien traitement de la donnée en mémoire à un moment non ? C'est du "larger than memory" mais pas non plus sans passage en mémoire

03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
@avouacr
Copy link
Member

avouacr commented Feb 22, 2024

Aussi une remarque un peu plus générale sur cette fiche très instructive (merci @slithiaote !) : je suis pas sûr que l'utilisation de duckdb via des requêtes pur SQL devrait être considéré "usage avancé", mais juste une manière alternative d'interagir avec une BDD DuckDB. C'est sûr qu'on se place dans le contexte d'UtilitR en disant ça, mais en réalité SQL reste très répandu et bien connu dans le monde statistique, en particulier par les ex-utilisateurs de SAS par exemple.

Du coup, pour les mêmes raisons, j'aurais tendance à réécrire le tout premier paragraphe de la fiche en "L’utilisateur souhaite manipuler des données structurées avec la syntaxe dplyr ou en langage SQL par le biais de l’écosystème duckdb (sélectionner des variables, sélectionner des observations, créer des variables, joindre des tables)."

@linogaliana
Copy link
Contributor Author

Il me semble que la fiche ne présente pas comment installer puis charger deux extensions pourtant potentiellement utiles pour les utilisateurs.rices d'utilitR : httpfs & spatial.

@pierre-lamarche ça sera également l'occasion de faire un encart spécificités pour l'insee: les extensions sur LS3, sur AUS et en local (perso j'ai jamais réussi à faire fonctionner en local httpfs à cause du proxy)

Copy link
Contributor

@JulienBlasco JulienBlasco left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merci beaucoup Sébastien pour cette proposition de fiche hyper utile et intéressante ! J'ai fait quelques propositions qui visent principalement à simplifier un peu le propos parce que, tout comme celle sur arrow, ça reste une fiche très compliquée (on aborde à la fois les bases de données, la lazy evaluation, l'interaction avec arrow...).

Comme dit précédemment, j'aurais trouvé intéressant d'ajouter le fait que, avec une base de données sur disque, on peut modifier des grosses tables sans devoir réécrire l'ensemble du fichier. Ca me paraît être un cas d'usage intéressant pour de la prod et de la diffusion de fichiers.

Et peut-être que ça vaudrait le coup de développer un peu plus la partie SQL ? Ca peut intéresser la communauté des SASseurs qui ont l'habitude d'utiliser des PROC SQL.

03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
- Écrire des données en format Parquet.


### Quels sont les avantages de `duckdb`?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pense qu'il est important de préciser dans cette section et la suivante les points communs et les différences avec les autres paradigmes proposés dans utilitr, notamment arrow, afin que les utilisateurs puissent se diriger vers l'une, l'autre ou la combinaison des deux solutions.

03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved

Pour contourner le manque de mémoire vive, on propose les quatre techniques suivantes :

- exécuter et sauvegarder les résultats au fur et à mesure. La commande `arrow::write_dataset` et la commande SQL `COPY request TO filename.parquet` savent le faire automatiquement, sans faire déborder la mémoire, pour certains calculs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Un exemple serait bienvenu. Je ne comprends pas la différence avec le tiret 4.

03_Fiches_thematiques/Fiche_duckdb.qmd Outdated Show resolved Hide resolved
- Pour exécuter une fonction fenêtre, il faut pouvoir localiser les données en mémoire avec un _index_.
- Les fichiers `parquet` ont un index `min-max` : les fichiers sont structurés en blocs, et on indique le minimum et maximum des valeurs du bloc dans les métadonnées. Ceci permet de sauter la lecture d'un bloc si l'on s'intéresse à des valeurs en dehors de la plage `min-max`, parce que l'on filtre les données par exemple.
- En SQL, on peut créer un index, mais il faut que les données soient en mémoire, ce qui peut s'avérer être incompatible avec de très grosses volumétries.
- Par contre, on peut partitionner les données, et le moteur SQL sait utiliser le partitionnement comme un index.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il me semble qu'il manque un exemple, le code ci-dessous ne montrant que comment créer un fichier de données partitionné.

linogaliana and others added 12 commits April 30, 2024 17:23
* supprime check_from qui est déprécié

* quelques précisions sur comment ouvrir des fichiers parquet

* une fonction par ligne

* limiter le nb de coeurs

* complements sur les fichiers intermédiaires

* ajoute de quotes manquants

* corrections sur les propositions des optimisations

* ajout d'une section sur les paramètres de configuration

* quelques ajouts sur SQL

* Update 03_Fiches_thematiques/Fiche_duckdb.qmd

* Update 03_Fiches_thematiques/Fiche_duckdb.qmd

* Update 03_Fiches_thematiques/Fiche_duckdb.qmd

* Update 03_Fiches_thematiques/Fiche_duckdb.qmd

* Update 03_Fiches_thematiques/Fiche_duckdb.qmd

---------

Co-authored-by: Olivier Meslin <[email protected]>
@oliviermeslin oliviermeslin merged commit 68b4465 into master May 27, 2024
3 checks passed
@linogaliana linogaliana deleted the dev-duckdb branch June 23, 2024 16:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants