[英]Count number of orders by a customer with amount less than the present order value in the last two orders in SQL?
[英]Querying last row of sorted column where value is less than specific amount from parquet file
我有一個大型鑲木地板文件,其中一列中的數據已排序。 下面是一個非常簡化的示例。
X Y
0 1 Red
1 5 Blue
2 8 Green
3 12 Purple
4 15 Blue
5 17 Purple
我有興趣查詢 Y 列的最后一個值,因為 X 以最有效的方式使用 python 小於某個數量。
我保證 X 列按升序排序。
例如,假設 X 小於 11,我希望 Y 值為“綠色”。
我嘗試了以下方法:
columns='Y'
filters=[('X','<',11]
pd.read_parquet('my_data.parquet',filters=filters,columns=columns).tail(1)
上面的代碼“有效”,但我希望可以進行優化,因為此查詢每天運行 100 萬次以上。
parquet 文件太大,無法讀入 memory。
我無法為“X”列設置起始值,因為無法保證 X 值之間的差距大小。例如,如果我要求“X > 10 和 X < 11”,我將得不到返回 Y 的值。
我希望鑒於數據已排序這一事實,有一種方法可以對其進行優化。
我願意使用 DuckDB 或其他一些庫來執行此操作。
我認為這就是.search_sorted()
的用途。
您還可以使用.scan_parquet()
來延遲加載數據而不是.read_parquet()
您可能需要使用when/then
來處理第一行匹配的情況 - 並使用索引0
而不是row - 1
- 或者沒有匹配的情況(如果可能的話)。
(pl.scan_parquet("search.parquet")
.select(
pl.col("Y")
.take(pl.col("X").search_sorted(11, side="left") - 1)
).collect()
shape: (1, 1)
┌───────┐
│ Y │
│ --- │
│ str │
╞═══════╡
│ Green │
└───────┘
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.