array_min / array_max fail on a zero-row batch for non-primitive element types
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
- 82/100
Hướng nghiên cứu
Bắt đầu với array_min_max_helper trong datafusion/functions-nested/src/min_max.rs và theo dõi fallback cho các kiểu phần tử không nguyên thủy. Bổ sung kiểm thử cho đầu vào List<Utf8> có không hàng nào và xác minh hàm trả về không hàng nào mà không có lỗi; so sánh với hành vi hiện có cho các kiểu nguyên thủy.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Describe the bug
array_min / array_max on a zero-row List<Utf8> (or any non-primitive element type) fails:
Execution error: Empty iterator passed to ScalarValue::iter_to_array
A zero-row List<Int64> works. array_min_max_helper (datafusion/functions-nested/src/min_max.rs) only has a fast path for primitive types; the fallback builds a Vec<ScalarValue> and calls ScalarValue::iter_to_array, which rejects an empty iterator.
Zero-row batches do reach these functions in practice: ProjectionExec and TopK evaluate expressions on every batch, so ORDER BY array_min(tags) LIMIT n fails whenever an input emits an empty batch.
To Reproduce
use std::sync::Arc;
use datafusion::arrow::array::{ArrayRef, ListBuilder, StringBuilder};
use datafusion::arrow::record_batch::RecordBatch;
use datafusion::prelude::SessionContext;
#[tokio::main]
async fn main() -> datafusion::error::Result<()> {
let ctx = SessionContext::new();
let tags: ArrayRef = Arc::new(ListBuilder::new(StringBuilder::new()).finish());
ctx.register_batch("t", RecordBatch::try_from_iter(vec![("tags", tags)])?)?;
ctx.sql("SELECT array_min(tags) FROM t").await?.show().await?; // error
Ok(())
}
Seen on 54.0.0; the code is unchanged on main.
Expected behavior
Zero rows, the same as for primitive element types.
Additional context
Found in OpenSearch's DataFusion backend when sorting on multi-valued keyword fields with an empty shard. Proposed fix: return new_empty_array(&array.value_type()) for an empty input before the fallback. PR to follow.
- Ngôn ngữ chính
- Rust
- Star
- 9.4k
- Fork
- 2.5k
- Merge trung bình
- 4 ngày 5 giờ
- Pull request đã merge (30 ngày)
- 344
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
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
apache/datafusion#26243 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
BaselineMetrics output_bytes converts every column to ArrayData for every batchCó thể đã có người làm @minhh-nguyen đã nhận 5 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
apache/datafusion#26071 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Replace manual `RowSelection` bitmap conversion with `force_mask()` after arrow-rs releaseCó thể đã có người làm @isabellehuangg đã nhận 7 ngày trước. Đang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
apache/datafusion#26030 · 1 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Lambda examples in the SQL function docs fail with the default dialectCó thể đã có người làm @Prajwal-k-tech đã nhận 8 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
apache/datafusion#25960 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Spark `xxhash64` hashes the raw bits of a NaN instead of the canonical NaNCó thể đã có người làm @mrhard9090 đã nhận 10 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
apache/datafusion#25913 ·
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ự
-
agent:sonnet-high enhancement priority: P2 ready-for-agent
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
shep-pm/shep-kelpie#652 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
install.ps1: Windows PowerShell 5.1 aborts after a successful cosign verification (NativeCommandError on 'Verified OK')Có thể đã có người làm @sly321-pixel đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
ai_p2
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
ClickHouse/ClickHouse#125522 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: OpenRouter streaming chunks report the requested router name instead of the model OpenRouter servedCó thể đã có người làm @Mrun25 đã nhận hôm nay. Đang mởbug llm translation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
BerriAI/litellm#46095 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày