87 个版本 (40 个重大更改)
新 0.41.3 | 2024年8月19日 |
---|---|
0.40.0 | 2024年8月12日 |
0.38.0 | 2024年7月22日 |
0.28.0 | 2024年3月25日 |
0.1.0 | 2022年3月5日 |
#91 在 编码
每月下载量360,863次
在 11 个crate中使用 (3 个直接使用)
71KB
1.5K SLoC
substrait-rs
Rust crate for Substrait: 关系代数跨语言序列化。
文档
lib.rs
:
Substrait: 关系代数跨语言序列化
序列化和反序列化
此crate提供生成类型以序列化和反序列化Substrait数据。
Protobuf
通过[prost]模块在[proto]模块中提供Protobuf序列化和反序列化。
示例
序列化和反序列化一个计划
use prost::Message;
use substrait::proto::Plan;
let plan = Plan::default();
// Serialize the plan
let encoded = plan.encode_to_vec();
// Deserialize the buffer to a Plan
let decoded = Plan::decode(encoded.as_slice())?;
assert_eq!(plan, decoded);
Serde支持
通过serde
功能生成的serde实现与Protobuf JSON映射匹配,通过pbjson。
示例
使用serde
功能反序列化计划版本
use substrait::proto::Version;
let version_json = r#"{
"minorNumber": 21
}"#;
let version = serde_json::from_str::<Version>(version_json)?;
assert_eq!(
version,
Version {
minor_number: 21,
..Default::default()
}
);
文本
Substrait定义了扩展的YAML模式。在[text]模块中,通过typify提供支持序列化和反序列化的类型。
示例
读取一个简单的扩展
use substrait::text::simple_extensions::SimpleExtensions;
let simple_extension_yaml = r#"
%YAML 1.2
---
scalar_functions:
-
name: "add"
description: "Add two values."
impls:
- args:
- name: x
value: i8
- name: y
value: i8
options:
overflow:
values: [ SILENT, SATURATE, ERROR ]
return: i8
"#;
let simple_extension = serde_yaml::from_str::<SimpleExtensions>(simple_extension_yaml)?;
assert_eq!(simple_extension.scalar_functions.len(), 1);
assert_eq!(simple_extension.scalar_functions[0].name, "add");
依赖项
~2.7–7MB
~137K SLoC