mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2025-12-22 22:20:02 +00:00
feat: Allow DataType/Vector converting into arrow's type
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use arrow2::datatypes::DataType as ArrowDataType;
|
||||||
|
|
||||||
use crate::type_id::LogicalTypeId;
|
use crate::type_id::LogicalTypeId;
|
||||||
use crate::value::Value;
|
use crate::value::Value;
|
||||||
|
|
||||||
@@ -13,6 +15,9 @@ pub trait DataType: std::fmt::Debug + Send + Sync {
|
|||||||
|
|
||||||
/// Returns the default value of this type.
|
/// Returns the default value of this type.
|
||||||
fn default_value(&self) -> Value;
|
fn default_value(&self) -> Value;
|
||||||
|
|
||||||
|
/// Convert this type as [arrow2::datatypes::DataType].
|
||||||
|
fn as_arrow_type(&self) -> ArrowDataType;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type DataTypeRef = Arc<dyn DataType>;
|
pub type DataTypeRef = Arc<dyn DataType>;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use arrow2::datatypes::DataType as ArrowDataType;
|
||||||
use common::bytes::StringBytes;
|
use common::bytes::StringBytes;
|
||||||
|
|
||||||
use crate::data_type::{DataType, DataTypeRef};
|
use crate::data_type::{DataType, DataTypeRef};
|
||||||
@@ -27,4 +28,8 @@ impl DataType for BinaryType {
|
|||||||
fn default_value(&self) -> Value {
|
fn default_value(&self) -> Value {
|
||||||
StringBytes::default().into()
|
StringBytes::default().into()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn as_arrow_type(&self) -> ArrowDataType {
|
||||||
|
ArrowDataType::LargeBinary
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use arrow2::datatypes::DataType as ArrowDataType;
|
||||||
|
|
||||||
use crate::data_type::{DataType, DataTypeRef};
|
use crate::data_type::{DataType, DataTypeRef};
|
||||||
use crate::type_id::LogicalTypeId;
|
use crate::type_id::LogicalTypeId;
|
||||||
use crate::types::primitive_traits::Primitive;
|
use crate::types::primitive_traits::Primitive;
|
||||||
@@ -49,6 +51,10 @@ macro_rules! impl_numeric {
|
|||||||
fn default_value(&self) -> Value {
|
fn default_value(&self) -> Value {
|
||||||
$Type::default().into()
|
$Type::default().into()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn as_arrow_type(&self) -> ArrowDataType {
|
||||||
|
ArrowDataType::$TypeId
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Debug for PrimitiveType<$Type> {
|
impl std::fmt::Debug for PrimitiveType<$Type> {
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ pub mod primitive;
|
|||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use arrow2::array::ArrayRef;
|
||||||
|
|
||||||
use crate::data_type::DataTypeRef;
|
use crate::data_type::DataTypeRef;
|
||||||
|
|
||||||
/// Vector of data values.
|
/// Vector of data values.
|
||||||
@@ -24,6 +26,9 @@ pub trait Vector: Send + Sync {
|
|||||||
fn is_empty(&self) -> bool {
|
fn is_empty(&self) -> bool {
|
||||||
self.len() == 0
|
self.len() == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Convert this vector to a new arrow [ArrayRef].
|
||||||
|
fn to_arrow_array(&self) -> ArrayRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type VectorRef = Arc<dyn Vector>;
|
pub type VectorRef = Arc<dyn Vector>;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use arrow2::array::ArrayRef;
|
||||||
use arrow2::array::BinaryValueIter;
|
use arrow2::array::BinaryValueIter;
|
||||||
use arrow2::bitmap::utils::ZipValidity;
|
use arrow2::bitmap::utils::ZipValidity;
|
||||||
|
|
||||||
@@ -27,6 +29,10 @@ impl Vector for BinaryVector {
|
|||||||
fn len(&self) -> usize {
|
fn len(&self) -> usize {
|
||||||
self.array.len()
|
self.array.len()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn to_arrow_array(&self) -> ArrayRef {
|
||||||
|
Arc::new(self.array.clone())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ScalarVector for BinaryVector {
|
impl ScalarVector for BinaryVector {
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use std::slice::Iter;
|
use std::slice::Iter;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use arrow2::array::ArrayRef;
|
||||||
use arrow2::array::{MutablePrimitiveArray, PrimitiveArray};
|
use arrow2::array::{MutablePrimitiveArray, PrimitiveArray};
|
||||||
use arrow2::bitmap::utils::ZipValidity;
|
use arrow2::bitmap::utils::ZipValidity;
|
||||||
|
|
||||||
@@ -33,6 +35,10 @@ impl<T: Primitive + CreateDataType> Vector for PrimitiveVector<T> {
|
|||||||
fn len(&self) -> usize {
|
fn len(&self) -> usize {
|
||||||
self.array.len()
|
self.array.len()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn to_arrow_array(&self) -> ArrayRef {
|
||||||
|
Arc::new(self.array.clone())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Primitive + CreateDataType> ScalarVector for PrimitiveVector<T> {
|
impl<T: Primitive + CreateDataType> ScalarVector for PrimitiveVector<T> {
|
||||||
|
|||||||
Reference in New Issue
Block a user