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编码

Download history 9266/week @ 2024-04-29 8910/week @ 2024-05-06 38688/week @ 2024-05-13 70978/week @ 2024-05-20 74110/week @ 2024-05-27 87429/week @ 2024-06-03 88052/week @ 2024-06-10 77046/week @ 2024-06-17 76049/week @ 2024-06-24 80901/week @ 2024-07-01 87746/week @ 2024-07-08 88091/week @ 2024-07-15 88101/week @ 2024-07-22 85342/week @ 2024-07-29 81717/week @ 2024-08-05 104095/week @ 2024-08-12

每月下载量360,863次
11 个crate中使用 (3 个直接使用)

Apache-2.0

71KB
1.5K SLoC

substrait-rs

substrait

crates.io docs.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