11 stable releases

5.4.0 Sep 15, 2021
5.3.0 Aug 31, 2021
5.0.0 Jul 17, 2021
4.4.0 Jun 28, 2021
3.0.0 Jan 26, 2021

#285 in Rust patterns

Download history 23/week @ 2021-06-01 44/week @ 2021-06-08 53/week @ 2021-06-15 32/week @ 2021-06-22 16/week @ 2021-06-29 25/week @ 2021-07-06 95/week @ 2021-07-13 29/week @ 2021-07-20 32/week @ 2021-07-27 53/week @ 2021-08-03 50/week @ 2021-08-10 25/week @ 2021-08-17 13/week @ 2021-08-24 27/week @ 2021-08-31 59/week @ 2021-09-07 43/week @ 2021-09-14

163 downloads per month

Apache-2.0

1.5MB
35K SLoC

Parquet Derive

A crate for deriving RecordWriter for arbitrary, simple structs. This does not generate writers for arbitrarily nested structures. It only works for primitives and a few generic structures and various levels of reference. Please see features checklist for what is currently supported.

Derive also has some support for the chrono time library. You must must enable the chrono feature to get this support.

Usage

Add this to your Cargo.toml:

[dependencies]
parquet = "5.0.0"
parquet_derive = "5.0.0"

and this to your crate root:

extern crate parquet;
#[macro_use] extern crate parquet_derive;

Example usage of deriving a RecordWriter for your struct:

use parquet;
use parquet::record::RecordWriter;

#[derive(ParquetRecordWriter)]
struct ACompleteRecord<'a> {
    pub a_bool: bool,
    pub a_str: &'a str,
    pub a_string: String,
    pub a_borrowed_string: &'a String,
    pub maybe_a_str: Option<&'a str>,
    pub magic_number: i32,
    pub low_quality_pi: f32,
    pub high_quality_pi: f64,
    pub maybe_pi: Option<f32>,
    pub maybe_best_pi: Option<f64>,
}

// Initialize your parquet file
let mut writer = SerializedFileWriter::new(file, schema, props).unwrap();
let mut row_group = writer.next_row_group().unwrap();

// Build up your records
let chunks = vec![ACompleteRecord{...}];

// The derived `RecordWriter` takes over here
(&chunks[..]).write_to_row_group(&mut row_group);

writer.close_row_group(row_group).unwrap();
writer.close().unwrap();

Features

  • Support writing String, &str, bool, i32, f32, f64, Vec<u8>
  • Support writing dictionaries
  • Support writing logical types like timestamp
  • Derive definition_levels for Option
  • Derive definition levels for nested structures
  • Derive writing tuple struct
  • Derive writing tuple container types

Requirements

  • Same as parquet-rs

Test

Testing a *_derive crate requires an intermediate crate. Go to parquet_derive_test and run cargo test for unit tests.

Docs

To build documentation, run cargo doc --no-deps. To compile and view in the browser, run cargo doc --no-deps --open.

License

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0.

Dependencies

~20MB
~428K SLoC