MIN/MAX don't unwrap nested encodings inside Dictionary columns
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 72/100
Hướng nghiên cứu
Bắt đầu từ hàm get_min_max_result_type, nơi nhánh RunEndEncoded đã đệ quy vào các giá trị của nó, còn nhánh Dictionary chỉ bóc một cấp. Kiểm tra các test MIN/MAX để xem một cột dictionary hoặc run-end được tạo và truy vấn qua MemTable như thế nào. Hoàn thành khi max trên cả hai cột mã hóa lồng nhau trả về giá trị UInt32 thuần, có kiểu UInt32, với một test cho mỗi trường hợp.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
get_min_max_result_type recurses into RunEndEncoded values but unwraps Dictionary only one level. When a dictionary's values are themselves encoded, MIN/MAX don't reach the plain value type:
| Column type | max(c) |
|---|---|
Dictionary<Int32, RunEndEncoded<Int32, UInt32>> |
Internal error: Min/Max accumulator not implemented for type RunEndEncoded(...) |
Dictionary<Int32, Dictionary<Int32, UInt32>> |
correct value, typed Dictionary(Int32, UInt32) instead of UInt32 |
To Reproduce
arrow_cast can't build these types, so they only come from a TableProvider, e.g. a MemTable:
let values = RunArray::<Int32Type>::try_new(&Int32Array::from(vec![1, 2]), &UInt32Array::from(vec![1, 3]))?;
let column: ArrayRef = Arc::new(DictionaryArray::<Int32Type>::try_new(Int32Array::from(vec![0, 0, 1]), Arc::new(values))?);
// register `column` as `c` in a MemTable `t`, then:
ctx.sql("SELECT max(c) FROM t").await?.collect().await?; // internal error
Expected behavior
Both columns return max(c) = 3 as UInt32, the same as RunEndEncoded<_, Dictionary<_, UInt32>>.
Additional context
Follow-up to https://github.com/apache/datafusion/pull/26248#discussion_r4267916127. Making the Dictionary arm recurse like the RunEndEncoded arm fixes both cases:
DataType::Dictionary(_, values) => get_min_max_result_type(&[values.deref().clone()]),
Willingness to contribute
I plan to contribute a fix for this bug independently
- Ngôn ngữ chính
- Rust
- Star
- 9.4k
- Fork
- 2.5k
- Merge trung bình
- 4 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 353
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của apache/datafusion
-
bug spark
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
apache/datafusion#26333 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug help wanted unparser
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
apache/datafusion#26316 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Deduplicate bucket computation in width_bucket_interval_mdn_exactCó thể đã có người làm @nightcityblade đã nhận 1 ngày trước. Đang mởenhancement good first issue help wanted spark tech debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
apache/datafusion#26307 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Use the shared aggr_test_schema in CSV scan tests instead of a local copyCó thể đã có người làm @med9110 đã nhận 1 ngày trước. Đang mởcore enhancement good first issue help wanted tech debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
apache/datafusion#26306 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
gcd benchmarks pass number_rows: 0 for 100k-row inputsCó thể đã có người làm @med9110 đã nhận 1 ngày trước. Đang mởbug functions good first issue help wanted tech debt
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
apache/datafusion#26297 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của apache/datafusion
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
dependencies effort:low flow:chore rust
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 64/100
jaroslawherod/micold-ai-ide#875 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
priority: low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
storytold/photocraft#6286 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Four problem loader browser tests fail on WindowsCó thể đã có người làm @Patriciaath999 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Kazakh (kk_KZ) and Georgian (ka_GE) system locales get English instead of the shipped translationsĐang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày