ssa.proto 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package NKikimrSSA;
  2. option java_package = "ru.yandex.kikimr.proto";
  3. // Program to pushdown to ColumnShard
  4. //
  5. // > 'SELECT y, z WHERE x > 10'
  6. // PROJECTION x, y, z
  7. // ASSIGN tmp = x > 10
  8. // FILTER BY tmp
  9. // PROJECTION y, z
  10. //
  11. // > 'SELECT min(x), sum(y) GROUP BY z'
  12. // PROJECTION x, y, z
  13. // ASSIGN agg1 = min(x)
  14. // ASSIGN agg2 = sum(y)
  15. // GROUP BY z
  16. // PROJECTION agg1, agg2
  17. //
  18. message TProgram {
  19. message TColumn {
  20. optional uint64 Id = 1;
  21. optional string Name = 2;
  22. }
  23. message TConstant {
  24. oneof value {
  25. bool Bool = 1;
  26. int32 Int32 = 2;
  27. uint32 Uint32 = 3;
  28. int64 Int64 = 4;
  29. uint64 Uint64 = 5;
  30. float Float = 6;
  31. double Double = 7;
  32. bytes Bytes = 8;
  33. string Text = 9;
  34. }
  35. }
  36. message TParameter {
  37. optional string Name = 1;
  38. }
  39. message TAssignment {
  40. enum EFunction {
  41. FUNC_UNSPECIFIED = 0;
  42. FUNC_CMP_EQUAL = 1;
  43. FUNC_CMP_NOT_EQUAL = 2;
  44. FUNC_CMP_LESS = 3;
  45. FUNC_CMP_LESS_EQUAL = 4;
  46. FUNC_CMP_GREATER = 5;
  47. FUNC_CMP_GREATER_EQUAL = 6;
  48. FUNC_IS_NULL = 7;
  49. FUNC_STR_LENGTH = 8;
  50. FUNC_STR_MATCH = 9;
  51. FUNC_BINARY_NOT = 10;
  52. FUNC_BINARY_AND = 11;
  53. FUNC_BINARY_OR = 12;
  54. FUNC_BINARY_XOR = 13;
  55. FUNC_MATH_ADD = 14;
  56. FUNC_MATH_SUBTRACT = 15;
  57. FUNC_MATH_MULTIPLY = 16;
  58. FUNC_MATH_DIVIDE = 17;
  59. FUNC_CAST_TO_BOOLEAN = 18;
  60. FUNC_CAST_TO_INT8 = 19;
  61. FUNC_CAST_TO_INT16 = 20;
  62. FUNC_CAST_TO_INT32 = 21;
  63. FUNC_CAST_TO_INT64 = 22;
  64. FUNC_CAST_TO_UINT8 = 23;
  65. FUNC_CAST_TO_UINT16 = 24;
  66. FUNC_CAST_TO_UINT32 = 25;
  67. FUNC_CAST_TO_UINT64 = 26;
  68. FUNC_CAST_TO_FLOAT = 27;
  69. FUNC_CAST_TO_DOUBLE = 28;
  70. FUNC_CAST_TO_BINARY = 29;
  71. FUNC_CAST_TO_FIXED_SIZE_BINARY = 30;
  72. FUNC_CAST_TO_TIMESTAMP = 31;
  73. FUNC_STR_MATCH_LIKE = 32;
  74. FUNC_STR_STARTS_WITH = 33;
  75. FUNC_STR_ENDS_WITH = 34;
  76. }
  77. message TFunction {
  78. optional uint32 Id = 1; // EFunction
  79. repeated TColumn Arguments = 2;
  80. }
  81. message TExternalFunction {
  82. optional string Name = 1;
  83. repeated TColumn Arguments = 2;
  84. }
  85. optional TColumn Column = 1;
  86. oneof expression {
  87. TFunction Function = 2;
  88. TExternalFunction ExternalFunction = 3;
  89. TConstant Constant = 4;
  90. bool Null = 5;
  91. TParameter Parameter = 6;
  92. }
  93. }
  94. message TAggregateAssignment {
  95. enum EAggregateFunction {
  96. AGG_UNSPECIFIED = 0;
  97. AGG_SOME = 1;
  98. AGG_COUNT = 2;
  99. AGG_MIN = 3;
  100. AGG_MAX = 4;
  101. AGG_SUM = 5;
  102. //AGG_AVG = 6;
  103. //AGG_VAR = 7;
  104. //AGG_COVAR = 8;
  105. //AGG_STDDEV = 9;
  106. //AGG_CORR = 10;
  107. //AGG_ARG_MIN = 11;
  108. //AGG_ARG_MAX = 12;
  109. //AGG_COUNT_DISTINCT = 13;
  110. //AGG_QUANTILES = 14;
  111. //AGG_TOP_COUNT = 15;
  112. //AGG_TOP_SUM = 16;
  113. }
  114. message TAggregateFunction {
  115. optional uint32 Id = 1; // EAggregateFunction
  116. repeated TColumn Arguments = 2;
  117. optional string Variant = 3; // i.e. POP/SAMP for AGG_VAR, AGG_COVAR, AGG_STDDEV
  118. // TODO: Parameters, i.e. N for topK(N)(arg)
  119. }
  120. optional TColumn Column = 1;
  121. optional TAggregateFunction Function = 2;
  122. }
  123. message TProjection {
  124. repeated TColumn Columns = 1;
  125. }
  126. message TFilter {
  127. // Predicate should be a bool column:
  128. // true - keep the row
  129. // false - remove the row
  130. optional TColumn Predicate = 1;
  131. }
  132. message TGroupBy {
  133. repeated TAggregateAssignment Aggregates = 1;
  134. repeated TColumn KeyColumns = 2;
  135. }
  136. message TCommand {
  137. oneof line {
  138. TAssignment Assign = 1;
  139. TProjection Projection = 2;
  140. TFilter Filter = 3;
  141. TGroupBy GroupBy = 4;
  142. // TODO: ORDER BY, LIMIT
  143. }
  144. }
  145. repeated TCommand Command = 1;
  146. optional uint32 Version = 2;
  147. }
  148. message TOlapProgram {
  149. // Store OLAP program in serialized format in case we do not need to deserialize it in TScanTaskMeta
  150. // Note: when this message exists the program must be present.
  151. optional bytes Program = 1;
  152. // RecordBatch deserialization require arrow::Schema, thus store it here
  153. optional bytes ParametersSchema = 2;
  154. optional bytes Parameters = 3;
  155. }