Struct google_cloud_bigquery::storage::array::StructArray
pub struct StructArray { /* private fields */ }Expand description
An array of structs
Each child (called field) is represented by a separate array.
Comparison with RecordBatch
Both RecordBatch and StructArray represent a collection of columns / arrays with the
same length.
However, there are a couple of key differences:
StructArraycan be nested within otherArray, including itselfRecordBatchcan contain top-level metadata on its associatedSchemaStructArraycan contain top-level nulls, i.e.nullRecordBatchcan only represent nulls in its child columns, i.e.{"field": null}
StructArray is therefore a more general data container than RecordBatch, and as such
code that needs to handle both will typically share an implementation in terms of
StructArray and convert to/from RecordBatch as necessary.
From implementations are provided to facilitate this conversion, however, converting
from a StructArray containing top-level nulls to a RecordBatch will panic, as there
is no way to preserve them.
Example: Create an array from a vector of fields
use std::sync::Arc;
use arrow_array::{Array, ArrayRef, BooleanArray, Int32Array, StructArray};
use arrow_schema::{DataType, Field};
let boolean = Arc::new(BooleanArray::from(vec![false, false, true, true]));
let int = Arc::new(Int32Array::from(vec![42, 28, 19, 31]));
let struct_array = StructArray::from(vec![
(
Arc::new(Field::new("b", DataType::Boolean, false)),
boolean.clone() as ArrayRef,
),
(
Arc::new(Field::new("c", DataType::Int32, false)),
int.clone() as ArrayRef,
),
]);
assert_eq!(struct_array.column(0).as_ref(), boolean.as_ref());
assert_eq!(struct_array.column(1).as_ref(), int.as_ref());
assert_eq!(4, struct_array.len());
assert_eq!(0, struct_array.null_count());
assert_eq!(0, struct_array.offset());Implementations§
§impl StructArray
impl StructArray
pub fn new(
fields: Fields,
arrays: Vec<Arc<dyn Array, Global>, Global>,
nulls: Option<NullBuffer>
) -> StructArray
pub fn new( fields: Fields, arrays: Vec<Arc<dyn Array, Global>, Global>, nulls: Option<NullBuffer> ) -> StructArray
Create a new StructArray from the provided parts, panicking on failure
Panics
Panics if Self::try_new returns an error
pub fn try_new(
fields: Fields,
arrays: Vec<Arc<dyn Array, Global>, Global>,
nulls: Option<NullBuffer>
) -> Result<StructArray, ArrowError>
pub fn try_new( fields: Fields, arrays: Vec<Arc<dyn Array, Global>, Global>, nulls: Option<NullBuffer> ) -> Result<StructArray, ArrowError>
Create a new StructArray from the provided parts, returning an error on failure
Errors
Errors if
fields.len() != arrays.len()fields[i].data_type() != arrays[i].data_type()arrays[i].len() != arrays[j].len()arrays[i].len() != nulls.len()!fields[i].is_nullable() && !nulls.contains(arrays[i].nulls())
pub fn new_null(fields: Fields, len: usize) -> StructArray
pub fn new_null(fields: Fields, len: usize) -> StructArray
Create a new StructArray of length len where all values are null
pub unsafe fn new_unchecked(
fields: Fields,
arrays: Vec<Arc<dyn Array, Global>, Global>,
nulls: Option<NullBuffer>
) -> StructArray
pub unsafe fn new_unchecked( fields: Fields, arrays: Vec<Arc<dyn Array, Global>, Global>, nulls: Option<NullBuffer> ) -> StructArray
Create a new StructArray from the provided parts without validation
Safety
Safe if Self::new would not panic with the given arguments
pub fn into_parts(
self
) -> (Fields, Vec<Arc<dyn Array, Global>, Global>, Option<NullBuffer>)
pub fn into_parts( self ) -> (Fields, Vec<Arc<dyn Array, Global>, Global>, Option<NullBuffer>)
Deconstruct this array into its constituent parts
pub fn num_columns(&self) -> usize
pub fn num_columns(&self) -> usize
Return the number of fields in this struct array
pub fn columns_ref(&self) -> Vec<Arc<dyn Array, Global>, Global>
👎Deprecated: Use columns().to_vec()
pub fn columns_ref(&self) -> Vec<Arc<dyn Array, Global>, Global>
Returns child array refs of the struct array
pub fn column_names(&self) -> Vec<&str, Global>
pub fn column_names(&self) -> Vec<&str, Global>
Return field names in this struct array
pub fn fields(&self) -> &Fields
pub fn fields(&self) -> &Fields
Returns the Fields of this StructArray
pub fn column_by_name(
&self,
column_name: &str
) -> Option<&Arc<dyn Array, Global>>
pub fn column_by_name( &self, column_name: &str ) -> Option<&Arc<dyn Array, Global>>
Return child array whose field name equals to column_name
Note: A schema can currently have duplicate field names, in which case the first field will always be selected. This issue will be addressed in ARROW-11178
pub fn slice(&self, offset: usize, len: usize) -> StructArray
pub fn slice(&self, offset: usize, len: usize) -> StructArray
Returns a zero-copy slice of this array with the indicated offset and length.
Trait Implementations§
§impl Array for StructArray
impl Array for StructArray
§fn slice(&self, offset: usize, length: usize) -> Arc<dyn Array, Global>
fn slice(&self, offset: usize, length: usize) -> Arc<dyn Array, Global>
§fn offset(&self) -> usize
fn offset(&self) -> usize
0. Read more§fn nulls(&self) -> Option<&NullBuffer>
fn nulls(&self) -> Option<&NullBuffer>
§fn get_buffer_memory_size(&self) -> usize
fn get_buffer_memory_size(&self) -> usize
§fn get_array_memory_size(&self) -> usize
fn get_array_memory_size(&self) -> usize
get_buffer_memory_size() and
includes the overhead of the data structures that contain the pointers to the various buffers.§fn is_null(&self, index: usize) -> bool
fn is_null(&self, index: usize) -> bool
index is null.
When using this function on a slice, the index is relative to the slice. Read more§fn is_valid(&self, index: usize) -> bool
fn is_valid(&self, index: usize) -> bool
index is not null.
When using this function on a slice, the index is relative to the slice. Read more§fn null_count(&self) -> usize
fn null_count(&self) -> usize
§impl Clone for StructArray
impl Clone for StructArray
§fn clone(&self) -> StructArray
fn clone(&self) -> StructArray
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for StructArray
impl Debug for StructArray
§impl From<&StructArray> for RecordBatch
impl From<&StructArray> for RecordBatch
§fn from(struct_array: &StructArray) -> RecordBatch
fn from(struct_array: &StructArray) -> RecordBatch
§impl From<ArrayData> for StructArray
impl From<ArrayData> for StructArray
§fn from(data: ArrayData) -> StructArray
fn from(data: ArrayData) -> StructArray
§impl From<RecordBatch> for StructArray
impl From<RecordBatch> for StructArray
§fn from(value: RecordBatch) -> StructArray
fn from(value: RecordBatch) -> StructArray
§impl From<StructArray> for ArrayData
impl From<StructArray> for ArrayData
§fn from(array: StructArray) -> ArrayData
fn from(array: StructArray) -> ArrayData
§impl From<StructArray> for RecordBatch
impl From<StructArray> for RecordBatch
§fn from(value: StructArray) -> RecordBatch
fn from(value: StructArray) -> RecordBatch
§impl Index<&str> for StructArray
impl Index<&str> for StructArray
§fn index(&self, name: &str) -> &<StructArray as Index<&str>>::Output
fn index(&self, name: &str) -> &<StructArray as Index<&str>>::Output
Get a reference to a column’s array by name.
Note: A schema can currently have duplicate field names, in which case the first field will always be selected. This issue will be addressed in ARROW-11178
Panics
Panics if the name is not in the schema.
§impl PartialEq<StructArray> for StructArray
impl PartialEq<StructArray> for StructArray
§fn eq(&self, other: &StructArray) -> bool
fn eq(&self, other: &StructArray) -> bool
self and other values to be equal, and is used
by ==.§impl TryFrom<Vec<(&str, Arc<dyn Array, Global>), Global>> for StructArray
impl TryFrom<Vec<(&str, Arc<dyn Array, Global>), Global>> for StructArray
§fn try_from(
values: Vec<(&str, Arc<dyn Array, Global>), Global>
) -> Result<StructArray, ArrowError>
fn try_from( values: Vec<(&str, Arc<dyn Array, Global>), Global> ) -> Result<StructArray, ArrowError>
builds a StructArray from a vector of names and arrays.
§type Error = ArrowError
type Error = ArrowError
Auto Trait Implementations§
impl !RefUnwindSafe for StructArray
impl Send for StructArray
impl Sync for StructArray
impl Unpin for StructArray
impl !UnwindSafe for StructArray
Blanket Implementations§
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> 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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request