“EXPLAIN / profiling” support for [i, j, by] to diagnose performance bottlenecks
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- r
- Área
- data, performance
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- R
- Estrellas
- 3.9k
- Forks
- 1.1k
- Merge medio
- 15 h 51 min
- PR fusionados (30 d)
- 3
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Rdatatable/data.table
-
as.data.table() recurses without end on a survival::Surv object (or any data.frame carrying one)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Rdatatable/data.table#7887 ·
-
test() doesn't distinguish plain NA_real_, NaNPosiblemente ocupada @MichaelChirico la tomó hace 67 días. Abiertoconsistency tests
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Rdatatable/data.table#7853 · 3 comentarios ·
-
HAVE_LONG_DOUBLE is conditioned on but never setPosiblemente ocupada @venom1204 la tomó hace 511 días. Abiertointernals
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Rdatatable/data.table#6938 · 1 comentario ·
-
encoding fread
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Rdatatable/data.table#5179 · 8 comentarios ·
-
documentation programming
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Rdatatable/data.table#3199 · 3 comentarios ·
Todos los issues de Rdatatable/data.table
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
inbo/erl-butterflies-2025#26 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
-
broken link to libgit2Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
-
CART ADaM: ADVS.CHG update codeAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
RConsortium/submissions-pilot7-synthetic-data#95 ·
Los mantenedores suelen responder en 1 día
-
betweenAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100