You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							134 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							134 lines
						
					
					
						
							3.0 KiB
						
					
					
				| syntax = "proto3"; | |
|  | |
| package schema_pb; | |
|  | |
| option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/schema_pb"; | |
|  | |
| /////////////////////////// | |
| // Topic definition | |
| /////////////////////////// | |
|  | |
| message Topic { | |
|     string namespace = 1; | |
|     string name = 2; | |
| } | |
| message Partition { | |
|     int32 ring_size = 1; | |
|     int32 range_start = 2; | |
|     int32 range_stop = 3; | |
|     int64 unix_time_ns = 4; | |
| } | |
|  | |
| message Offset { | |
|     Topic topic = 1; | |
|     repeated PartitionOffset partition_offsets = 2; | |
| } | |
|  | |
| enum OffsetType { | |
|     RESUME_OR_EARLIEST = 0; | |
|     RESET_TO_EARLIEST = 5; | |
|     EXACT_TS_NS = 10; | |
|     RESET_TO_LATEST = 15; | |
|     RESUME_OR_LATEST = 20; | |
|     // Offset-based positioning | |
|     EXACT_OFFSET = 25; | |
|     RESET_TO_OFFSET = 30; | |
| } | |
|  | |
| message PartitionOffset { | |
|     Partition partition = 1; | |
|     int64 start_ts_ns = 2; | |
|     int64 start_offset = 3;  // For offset-based positioning | |
| } | |
|  | |
| /////////////////////////// | |
| // schema definition | |
| /////////////////////////// | |
|  | |
| message RecordType { | |
|     repeated Field fields = 1; | |
| } | |
|  | |
| message Field { | |
|     string name = 1; | |
|     int32 field_index = 2; | |
|     Type type = 3; | |
|     bool is_repeated = 4; | |
|     bool is_required = 5; | |
| } | |
|  | |
| message Type { | |
|     oneof kind { | |
|         ScalarType scalar_type = 1; | |
|         RecordType record_type = 2; | |
|         ListType list_type = 3; | |
|     } | |
| } | |
|  | |
| enum ScalarType { | |
|     BOOL = 0; | |
|     INT32 = 1; | |
|     INT64 = 3; | |
|     FLOAT = 4; | |
|     DOUBLE = 5; | |
|     BYTES = 6; | |
|     STRING = 7; | |
|     // Parquet logical types for analytics | |
|     TIMESTAMP = 8;  // UTC timestamp (microseconds since epoch) | |
|     DATE = 9;       // Date (days since epoch) | |
|     DECIMAL = 10;   // Arbitrary precision decimal | |
|     TIME = 11;      // Time of day (microseconds) | |
| } | |
|  | |
| message ListType { | |
|     Type element_type = 1; | |
| } | |
|  | |
| /////////////////////////// | |
| // value definition | |
| /////////////////////////// | |
| message RecordValue { | |
|     map<string, Value> fields = 1; | |
| } | |
| message Value { | |
|     oneof kind { | |
|         bool bool_value = 1; | |
|         int32 int32_value = 2; | |
|         int64 int64_value = 3; | |
|         float float_value = 4; | |
|         double double_value = 5; | |
|         bytes bytes_value = 6; | |
|         string string_value = 7; | |
|         // Parquet logical type values | |
|         TimestampValue timestamp_value = 8; | |
|         DateValue date_value = 9; | |
|         DecimalValue decimal_value = 10; | |
|         TimeValue time_value = 11; | |
|         // Complex types | |
|         ListValue list_value = 14; | |
|         RecordValue record_value = 15; | |
|     } | |
| } | |
| // Parquet logical type value messages | |
| message TimestampValue { | |
|     int64 timestamp_micros = 1;  // Microseconds since Unix epoch (UTC) | |
|     bool is_utc = 2;             // True if UTC, false if local time | |
| } | |
|  | |
| message DateValue { | |
|     int32 days_since_epoch = 1;  // Days since Unix epoch (1970-01-01) | |
| } | |
|  | |
| message DecimalValue { | |
|     bytes value = 1;             // Arbitrary precision decimal as bytes | |
|     int32 precision = 2;         // Total number of digits | |
|     int32 scale = 3;             // Number of digits after decimal point | |
| } | |
|  | |
| message TimeValue { | |
|     int64 time_micros = 1;       // Microseconds since midnight | |
| } | |
|  | |
| message ListValue { | |
|     repeated Value values = 1; | |
| }
 |