pub struct Statistics {
pub num_rows: Precision<usize>,
pub total_byte_size: Precision<usize>,
pub column_statistics: Vec<ColumnStatistics>,
}
Expand description
Statistics for a relation Fields are optional and can be inexact because the sources sometimes provide approximate estimates for performance reasons and the transformations output are not always predictable.
Fields§
§num_rows: Precision<usize>
The number of table rows.
total_byte_size: Precision<usize>
Total bytes of the table rows.
column_statistics: Vec<ColumnStatistics>
Statistics on a column level.
It must contains a ColumnStatistics
for each field in the schema of
the table to which the Statistics
refer.
Implementations§
Source§impl Statistics
impl Statistics
Sourcepub fn new_unknown(schema: &Schema) -> Statistics
pub fn new_unknown(schema: &Schema) -> Statistics
Returns a Statistics
instance for the given schema by assigning
unknown statistics to each column in the schema.
Sourcepub fn unknown_column(schema: &Schema) -> Vec<ColumnStatistics>
pub fn unknown_column(schema: &Schema) -> Vec<ColumnStatistics>
Returns an unbounded ColumnStatistics
for each field in the schema.
Sourcepub fn with_num_rows(self, num_rows: Precision<usize>) -> Statistics
pub fn with_num_rows(self, num_rows: Precision<usize>) -> Statistics
Set the number of rows
Sourcepub fn with_total_byte_size(
self,
total_byte_size: Precision<usize>,
) -> Statistics
pub fn with_total_byte_size( self, total_byte_size: Precision<usize>, ) -> Statistics
Set the total size, in bytes
Sourcepub fn add_column_statistics(self, column_stats: ColumnStatistics) -> Statistics
pub fn add_column_statistics(self, column_stats: ColumnStatistics) -> Statistics
Add a column to the column statistics
Sourcepub fn to_inexact(self) -> Statistics
pub fn to_inexact(self) -> Statistics
If the exactness of a Statistics
instance is lost, this function relaxes
the exactness of all information by converting them Precision::Inexact
.
Sourcepub fn project(self, projection: Option<&Vec<usize>>) -> Statistics
pub fn project(self, projection: Option<&Vec<usize>>) -> Statistics
Project the statistics to the given column indices.
For example, if we had statistics for columns {"a", "b", "c"}
,
projecting to vec![2, 1]
would return statistics for columns {"c", "b"}
.
Sourcepub fn with_fetch(
self,
schema: Arc<Schema>,
fetch: Option<usize>,
skip: usize,
n_partitions: usize,
) -> Result<Statistics, DataFusionError>
pub fn with_fetch( self, schema: Arc<Schema>, fetch: Option<usize>, skip: usize, n_partitions: usize, ) -> Result<Statistics, DataFusionError>
Calculates the statistics after applying fetch
and skip
operations.
Here, self
denotes per-partition statistics. Use the n_partitions
parameter to compute global statistics in a multi-partition setting.
Sourcepub fn try_merge_iter<'a, I>(
items: I,
schema: &Schema,
) -> Result<Statistics, DataFusionError>where
I: IntoIterator<Item = &'a Statistics>,
pub fn try_merge_iter<'a, I>(
items: I,
schema: &Schema,
) -> Result<Statistics, DataFusionError>where
I: IntoIterator<Item = &'a Statistics>,
Summarize zero or more statistics into a single Statistics
instance.
Returns an error if the statistics do not match the specified schemas.
Sourcepub fn try_merge(
self,
other: &Statistics,
) -> Result<Statistics, DataFusionError>
pub fn try_merge( self, other: &Statistics, ) -> Result<Statistics, DataFusionError>
Merge this Statistics value with another Statistics value.
Returns an error if the statistics do not match (different schemas).
§Example
let stats1 = Statistics::default()
.with_num_rows(Precision::Exact(1))
.with_total_byte_size(Precision::Exact(2))
.add_column_statistics(ColumnStatistics::new_unknown()
.with_null_count(Precision::Exact(3))
.with_min_value(Precision::Exact(ScalarValue::from(4)))
.with_max_value(Precision::Exact(ScalarValue::from(5)))
);
let stats2 = Statistics::default()
.with_num_rows(Precision::Exact(10))
.with_total_byte_size(Precision::Inexact(20))
.add_column_statistics(ColumnStatistics::new_unknown()
// absent null count
.with_min_value(Precision::Exact(ScalarValue::from(40)))
.with_max_value(Precision::Exact(ScalarValue::from(50)))
);
let merged_stats = stats1.try_merge(&stats2).unwrap();
let expected_stats = Statistics::default()
.with_num_rows(Precision::Exact(11))
.with_total_byte_size(Precision::Inexact(22)) // inexact in stats2 --> inexact
.add_column_statistics(
ColumnStatistics::new_unknown()
.with_null_count(Precision::Absent) // missing from stats2 --> absent
.with_min_value(Precision::Exact(ScalarValue::from(4)))
.with_max_value(Precision::Exact(ScalarValue::from(50)))
);
assert_eq!(merged_stats, expected_stats)
Trait Implementations§
Source§impl Clone for Statistics
impl Clone for Statistics
Source§fn clone(&self) -> Statistics
fn clone(&self) -> Statistics
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for Statistics
impl Debug for Statistics
Source§impl Default for Statistics
impl Default for Statistics
Source§fn default() -> Statistics
fn default() -> Statistics
Returns a new Statistics
instance with all fields set to unknown
and no columns.
Source§impl Display for Statistics
impl Display for Statistics
Source§impl PartialEq for Statistics
impl PartialEq for Statistics
Source§impl TryFrom<&Statistics> for Statistics
impl TryFrom<&Statistics> for Statistics
Source§type Error = DataFusionError
type Error = DataFusionError
Source§fn try_from(
s: &Statistics,
) -> Result<Statistics, <Statistics as TryFrom<&Statistics>>::Error>
fn try_from( s: &Statistics, ) -> Result<Statistics, <Statistics as TryFrom<&Statistics>>::Error>
impl Eq for Statistics
impl StructuralPartialEq for Statistics
Auto Trait Implementations§
impl Freeze for Statistics
impl !RefUnwindSafe for Statistics
impl Send for Statistics
impl Sync for Statistics
impl Unpin for Statistics
impl !UnwindSafe for Statistics
Blanket Implementations§
Source§impl<T> AlignerFor<1> for T
impl<T> AlignerFor<1> for T
Source§impl<T> AlignerFor<1024> for T
impl<T> AlignerFor<1024> for T
Source§type Aligner = AlignTo1024<T>
type Aligner = AlignTo1024<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<128> for T
impl<T> AlignerFor<128> for T
Source§type Aligner = AlignTo128<T>
type Aligner = AlignTo128<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<16> for T
impl<T> AlignerFor<16> for T
Source§impl<T> AlignerFor<16384> for T
impl<T> AlignerFor<16384> for T
Source§type Aligner = AlignTo16384<T>
type Aligner = AlignTo16384<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<2> for T
impl<T> AlignerFor<2> for T
Source§impl<T> AlignerFor<2048> for T
impl<T> AlignerFor<2048> for T
Source§type Aligner = AlignTo2048<T>
type Aligner = AlignTo2048<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<256> for T
impl<T> AlignerFor<256> for T
Source§type Aligner = AlignTo256<T>
type Aligner = AlignTo256<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<32> for T
impl<T> AlignerFor<32> for T
Source§impl<T> AlignerFor<32768> for T
impl<T> AlignerFor<32768> for T
Source§type Aligner = AlignTo32768<T>
type Aligner = AlignTo32768<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<4> for T
impl<T> AlignerFor<4> for T
Source§impl<T> AlignerFor<4096> for T
impl<T> AlignerFor<4096> for T
Source§type Aligner = AlignTo4096<T>
type Aligner = AlignTo4096<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<512> for T
impl<T> AlignerFor<512> for T
Source§type Aligner = AlignTo512<T>
type Aligner = AlignTo512<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<64> for T
impl<T> AlignerFor<64> for T
Source§impl<T> AlignerFor<8> for T
impl<T> AlignerFor<8> for T
Source§impl<T> AlignerFor<8192> for T
impl<T> AlignerFor<8192> for T
Source§type Aligner = AlignTo8192<T>
type Aligner = AlignTo8192<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
Source§fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
Source§fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
Source§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset
. Read moreSource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset
. Read moreSource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset
. Read moreSource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset
. Read moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read more