Description
Feature Request
Problem
I'm using dj.Top
to monitor the top results of a given computation. Intuitively, running MyTable & dj.Top(order_by='field DESC', limit=n)
should show the top n values of this field, in this order. Instead, I need to scan the result ordered by primary key, or fetch it.
Requirements
The script below outlines expected vs actual outcome.
Demo
import datajoint as dj
schema = dj.schema("cbroz_temp")
@schema
class TopDemo(dj.Lookup):
definition = """
id : int
---
my_var: varchar(64)
my_float: float
"""
contents = [(1, "C", 2.0), (2, "D", 4.0), (3, "A", 1.0), (4, "B", 3.0)]
if __name__ == "__main__":
print("TopDemo contents:\n", TopDemo())
print(
"Order by my_float ascending:\n",
"Expected IDs 3, 4, 1. Got IDs: 1, 3, 4\n",
TopDemo & dj.Top(order_by="my_float ASC", limit=3),
)
print(
"Order by my_var descending:\n",
"Expected IDs 2, 1, 4. Got IDs: 1, 2, 4\n",
TopDemo & dj.Top(order_by="my_var DESC", limit=3),
)
Justification
This would cut down on redundant use of order_by
Alternative Considerations
Currently, I pass the same order_by
arg to a fetch
with format='frame'
(MyTable & dj.Top(order_by="field DESC", limit=3)).fetch(order_by"field DESC", format=Frame)
Related Errors
n/a
Please include steps to reproduce provided errors as follows:
- OS: Linux
- Python Version: 3.9.6
- MySQL Version: 8 latest
- MySQL Deployment Strategy: local docker
- DataJoint Version: 0.14.3
- Minimum number of steps to reliably reproduce the issue: see above
- Complete error stack as a result of evaluating the above steps: n/a
Screenshots
n/a
Additional Research and Context
preview
is already running the alternative step of fetching as a frame
datajoint-python/datajoint/preview.py
Lines 6 to 13 in 5f37f83
If query expressions were assigned an order_by
attr by Top
, QueryExpression.preview
could pass this as a kwarg to preview
.