Long schema
Layout
One row per asset and timestamp. The assets are stacked in a base column, and each field (open, close, base_volume…) is a single column shared by all assets. There is no index: close_ts is a regular column.
Use it when you filter or group by asset, or when you work with many assets. Adding an asset adds rows, not columns. This is the long, tidy format that most analysis tools expect.
A download by universe has the same columns, sorted by close_ts then base: a pair simply has no rows in the slots where it wasn't listed.
Plain columns, no index: close_ts and base come back as regular columns in pandas and in Polars.
pandas
Filter on base like any other column. The filters argument of read_parquet is applied while reading, so only the matching rows are loaded.
Polars
Filter on base, or pivot to get one column per asset.
Polars (lazy)
scan_parquet reads nothing yet: it only builds a query. Chain your operations on it, then call collect() last to run the whole query and load the result. The filter and the column selection are pushed down to the file, so only the matching rows and columns are read.