featurebase/internal/private.proto
Matt Jaffee 5dcabfcc7f
support for decimal fields
This commit adds a Decimal field type which is implemented mostly with
the Int field. It adds an optional "Scale" value to the Int field
which means that the values stored in that field are actually meant to
be divided by 10^Scale before being interpreted.

In order to make use of this functionality, we extend the importValue
request to allow a slice of floats rather than just int64. If the
slice of floats is present, each float in the slice is multiplied by
10^Scale and converted to an int64 before being imported. If a slice
of int64 is imported to a Decimal field, it is treated normally, and
scale is ignored. This allows the conversion to be handled at the
client side if desired.

Currently there are Field level methods for querying Float values out
of a decimal field, but no support in PQL or the executor for getting
float values. Going to wait until I can use the generic result type
before doing that, so for now, any values queried will be the scaled
integer values.

needed to add client support for importing float values, and did this
by adding a more general and simplified client method for value
imports.

rewrote api.ImportValue to use the new method which should be more
performant and efficient.

allow floats to be "pilosa import"ed into decimal fields
2019-10-29 16:36:14 -05:00

196 lines
2.8 KiB
Protocol Buffer

syntax = "proto3";
package internal;
message IndexMeta {
bool Keys = 3;
bool TrackExistence = 4;
}
message FieldOptions {
string Type = 8;
string CacheType = 3;
uint32 CacheSize = 4;
string TimeQuantum = 5;
int64 Min = 9;
int64 Max = 10;
bool Keys = 11;
bool NoStandardView = 12;
int64 Base = 13;
uint64 BitDepth = 14;
int64 Scale = 15;
}
message ImportResponse {
string Err = 1;
}
message BlockDataRequest {
string Index = 1;
string Field = 2;
string View = 5;
uint64 Shard = 4;
uint64 Block = 3;
}
message BlockDataResponse {
repeated uint64 RowIDs = 1;
repeated uint64 ColumnIDs = 2;
}
message Cache {
repeated uint64 IDs = 1;
}
message MaxShards {
map<string, uint64> Standard = 1;
}
message CreateShardMessage {
string Index = 1;
string Field = 3;
uint64 Shard = 2;
}
message DeleteIndexMessage {
string Index = 1;
}
message CreateIndexMessage {
string Index = 1;
IndexMeta Meta = 2;
}
message CreateFieldMessage {
string Index = 1;
string Field = 2;
FieldOptions Meta = 3;
}
message DeleteFieldMessage {
string Index = 1;
string Field = 2;
}
message DeleteAvailableShardMessage {
string Index = 1;
string Field = 2;
uint64 ShardID = 3;
}
message Field {
string Name = 1;
FieldOptions Meta = 2;
repeated string Views = 3;
}
message Schema {
repeated Index Indexes = 1;
}
message Index {
string Name = 1;
repeated Field Fields = 4;
}
message URI {
string Scheme = 1;
string Host = 2;
uint32 Port = 3;
}
message Node {
string ID = 1;
URI URI = 2;
bool IsCoordinator = 3;
string State = 4;
}
message NodeStateMessage {
string NodeID = 1;
string State = 2;
}
message NodeEventMessage {
uint32 Event = 1;
Node Node = 2;
}
message NodeStatus {
Node Node = 1;
Schema Schema = 3;
repeated IndexStatus Indexes = 4;
}
message IndexStatus {
string Name = 1;
repeated FieldStatus Fields = 2;
}
message FieldStatus {
string Name = 1;
repeated uint64 AvailableShards = 2;
}
message ClusterStatus {
string ClusterID = 1;
string State = 2;
repeated Node Nodes = 3;
}
message BSIGroup {
string Name = 1;
string Type = 2;
int64 Min = 3;
int64 Max = 4;
}
message CreateViewMessage {
string Index = 1;
string Field = 2;
string View = 3;
}
message DeleteViewMessage {
string Index = 1;
string Field = 2;
string View = 3;
}
message ResizeInstruction {
int64 JobID = 1;
Node Node = 2;
Node Coordinator = 3;
repeated ResizeSource Sources = 4;
NodeStatus NodeStatus = 7;
ClusterStatus ClusterStatus = 6;
}
message ResizeSource {
Node Node = 1;
string Index = 2;
string Field = 3;
string View = 4;
uint64 Shard = 5;
}
message ResizeInstructionComplete {
int64 JobID = 1;
Node Node = 2;
string Error = 3;
}
message SetCoordinatorMessage {
Node New = 1;
}
message UpdateCoordinatorMessage {
Node New = 1;
}
message Topology {
string ClusterID = 1;
repeated string NodeIDs = 2;
}
message RecalculateCaches {}