MCPcopy Create free account
hub / github.com/apache/paimon-rust / read_batch_stream

Method read_batch_stream

crates/paimon/src/arrow/format/orc.rs:34–83  ·  view source on GitHub ↗
(
        &self,
        reader: Box<dyn FileRead>,
        file_size: u64,
        read_fields: &[DataField],
        // TODO: support predicate pushdown for ORC (stripe pruning + row-level filtering

Source from the content-addressed store, hash-verified

32#[async_trait]
33impl FormatFileReader for OrcFormatReader {
34 async fn read_batch_stream(
35 &self,
36 reader: Box<dyn FileRead>,
37 file_size: u64,
38 read_fields: &[DataField],
39 // TODO: support predicate pushdown for ORC (stripe pruning + row-level filtering)
40 _predicates: Option<&FilePredicates>,
41 batch_size: Option<usize>,
42 row_selection: Option<Vec<RowRange>>,
43 ) -> crate::Result<ArrowRecordBatchStream> {
44 let orc_reader = OrcFileReader::new(file_size, reader);
45
46 let builder = ArrowReaderBuilder::try_new_async(orc_reader)
47 .await
48 .map_err(|e| Error::UnexpectedError {
49 message: format!("Failed to open ORC file: {e}"),
50 source: Some(Box::new(e)),
51 })?;
52
53 let projected_names: Vec<&str> = read_fields.iter().map(|f| f.name()).collect();
54 let projection =
55 ProjectionMask::named_roots(builder.file_metadata().root_data_type(), &projected_names);
56
57 let mut builder = builder.with_projection(projection);
58
59 if let Some(size) = batch_size {
60 builder = builder.with_batch_size(size);
61 }
62
63 if let Some(ref ranges) = row_selection {
64 let total_rows: usize = builder
65 .file_metadata()
66 .stripe_metadatas()
67 .iter()
68 .map(|s| s.number_of_rows() as usize)
69 .sum();
70 let selection = build_range_row_selection(total_rows, ranges);
71 builder = builder.with_row_selection(selection);
72 }
73
74 let stream = builder.build_async();
75 Ok(stream
76 .map(|r| {
77 r.map_err(|e| Error::UnexpectedError {
78 message: format!("ORC read error: {e}"),
79 source: Some(Box::new(e)),
80 })
81 })
82 .boxed())
83 }
84}
85
86// ---------------------------------------------------------------------------

Callers

nothing calls this directly

Calls 5

with_projectionMethod · 0.80
with_batch_sizeMethod · 0.80
iterMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected