odps-sdk/odps-lot-proto/lot/expression.proto (76 lines of code) (raw):

import "common/types.proto"; import "common/expression.proto"; import "common/language.proto"; package apsara.odps.lot; option java_outer_classname = "ExpressionProtos"; /* * 之所以不直接支持提供函数嵌套,如在值函数中引用聚合函数、在聚合函数中引用值函数、在窗口函数引用聚合函数/值函数等等是因为当用户直接构造LOT时思考方式不会这样。 * 另外在planner内部,表达式就是这个样子 */ message ScalarExpression { optional Reference Reference = 1; optional Constant Constant = 2; optional Null Null = 3; optional ScalarFunction Expression = 4; } message ScalarFunction { required string Project = 1; required string Name = 2; repeated ScalarExpression Parameters = 3; optional bool requireBuiltin = 4 [default = false]; } message AggregationFunction { required string Project = 1; required string Name = 2; required bool IsDistinct = 3; repeated ScalarExpression Parameters = 4; optional bool requireBuiltin = 5 [default = false]; } message WindowFunction { required string Project = 1; required string Name = 2; optional bool IsDistinct = 3; repeated ScalarExpression Parameters = 4; repeated ScalarExpression PartitionBy = 5; repeated group OrderBy = 6 { required ScalarExpression Expression = 1; optional bool IsAsc = 2 [default = true]; }; optional group WindowingClause = 7 { required int32 Begin = 1; required int32 End = 2; } optional bool requireBuiltin = 8 [default = false]; //TODO: add other properties. } //UDTF,实际上聚合函数、WindowFunction都是它的特例 message TableValuedFunction { required string Project = 1; required string Name = 2; repeated ScalarExpression Parameters = 3; repeated string OutputColumns = 4; repeated group Properties = 5 { required string Key = 1; required string Value = 2; }; optional bool requireBuiltin = 6 [default = false]; } message TemporaryFunction { required string Name = 1; repeated group Resources = 2 { required string Project = 1; required string ResourceName = 2; }; required string ClassName = 3; required Language Language = 4; }