OdpsProtobuf

Protobuf for ODPS

Installation

Add this line to your application's Gemfile:

gem 'odps_protobuf'

And then execute:

$ bundle

Or install it yourself as:

$ gem install odps_protobuf

Usage

schema = {
 'columns' => [
   { 'name' => 'uuid', 'type' => 'bigint' },
   { 'name' => 'name', 'type' => 'string' },
   { 'name' => 'price', 'type' => 'decimal' },
   { 'name' => 'discount', 'type' => 'double' },
   { 'name' => 'in_stock', 'type' => 'boolean' },
   { 'name' => 'created_time', 'type' => 'datetime' }
 ]
}
record1 = [1, 'apple', BigDecimal.new("1.2"), 0.5, true, Time.now]
record2 = [1000, 'red apple', BigDecimal.new("12.5"), 0.9, false, Time.now]

serializer = OdpsProtobuf::Serializer.new

protobufed_str = serializer.serialize([record1, record2], schema)  # => "\b\u0002\u0012\u0005apple\u001A\u00031.2!\u0000\u0000\u0000\u0000\u0000\u0000\xE0?(\u00010\x80\xE4ͮ\xBFT\x80\xC0\xFF\u007F\xCCӥ\xE2\u000F\b\xD0\u000F\u0012\tred apple\u001A\u000412.5!\xCD\xCC\xCC\xCC\xCC\xCC\xEC?(\u00000\x80\xE4ͮ\xBFT\x80\xC0\xFF\u007Fڿ\x9C\xB8\u0006\xF0\xFF\xFF\u007F\u0004\xF8\xFF\xFF\u007F\xE5鞜\u0006"

deserializer = Odps::ProtobufDeSerializer.new
deserializer.deserialize(protobufed_str, schema) # => [[1, "apple", #<BigDecimal:7f94dc9b2a80,'0.12E1',18(18)>, 0.5, true, 2016-01-01 10:00:00 +0800], [1000, "red apple", #<BigDecimal:7f94dc9b2648,'0.125E2',18(18)>, 0.9, false, 2016-01-01 10:00:00 +0800]]

Authors && Contributors

Thanks

License

licensed under the Apache License 2.0