“EXPLAIN / profiling” support for [i, j, by] to diagnose performance bottlenecks
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
- Type d'issue
- Fonctionnalité
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- r
- Domaine
- data, performance
Piste de recherche
The issue names no files, tests, or entry points. Start by reviewing how DT[i, j, by] handles filtering, grouping, joins, keys or indices, materialization, and copies. Define the diagnostics and acceptance criteria for the proposed explain or profiling mode.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Problem
A common difficulty for users is understanding why a particular data.table query is slow.
When writing expressions like:
DT[ i , j , by]
there is currently no way to determine:
Whether time is spent in i filtering, j computation, or by grouping
Whether a key / index is actually being used
Whether grouping is triggering expensive materialization
Whether unexpected memory copies are occurring
Whether a join is using a fast path or falling back to a slower path
Most users rely on:
system.time(DT[i, j, by])
which measures only the total time and gives no insight into the internal bottleneck.
This makes optimization and debugging of complex workflows difficult, especially for users familiar with SQL-style tools like EXPLAIN.
Proposed Idea
Introduce an optional profiling / explain mode for data.table operations, conceptually similar to SQL’s EXPLAIN.
For example:
explain( DT[x > 5, .(m = mean(y)), by = z] )
or
options(datatable.explain = TRUE) DT[x > 5, .(m = mean(y)), by = z]
This could output structured diagnostics such as:
data.table EXPLAIN
Rows scanned: 5,000,000
Rows matched in i: 1,240,532
Groups formed by by: 2,134
Time spent:
i (filter): 120 ms
by (grouping): 340 ms
j (compute): 90 ms
Keys / indices used: YES (key: z)
Materialization: NO
Memory copies: 1 shallow copy
- Langage dominant
- R
- Étoiles
- 3.9k
- Forks
- 1.1k
- Merge moyen
- 15 h 51 min
- PR mergées (30 j)
- 3
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Rdatatable/data.table
-
as.data.table() recurses without end on a survival::Surv object (or any data.frame carrying one)Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
Rdatatable/data.table#7887 ·
-
test() doesn't distinguish plain NA_real_, NaNPeut-être pris @MichaelChirico l’a pris il y a 67 jours. Ouverteconsistency tests
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Rdatatable/data.table#7853 · 3 commentaires ·
-
HAVE_LONG_DOUBLE is conditioned on but never setPeut-être pris @venom1204 l’a pris il y a 511 jours. Ouverteinternals
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Rdatatable/data.table#6938 · 1 commentaire ·
-
encoding fread
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Rdatatable/data.table#5179 · 8 commentaires ·
-
documentation programming
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Rdatatable/data.table#3199 · 3 commentaires ·
Toutes les issues de Rdatatable/data.table
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
inbo/erl-butterflies-2025#26 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
-
broken link to libgit2Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
-
CART ADaM: ADVS.CHG update codeOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
RConsortium/submissions-pilot7-synthetic-data#95 ·
Les mainteneurs répondent en général sous 1 jour
-
betweenOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100