From e6918187568dbd01842d8d1d2c808ce16a894239 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 13:54:28 +0200 Subject: Adding upstream version 18.2.2. Signed-off-by: Daniel Baumann --- src/arrow/experimental/computeir/Relation.fbs | 221 ++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 src/arrow/experimental/computeir/Relation.fbs (limited to 'src/arrow/experimental/computeir/Relation.fbs') diff --git a/src/arrow/experimental/computeir/Relation.fbs b/src/arrow/experimental/computeir/Relation.fbs new file mode 100644 index 000000000..ab0156e0f --- /dev/null +++ b/src/arrow/experimental/computeir/Relation.fbs @@ -0,0 +1,221 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +include "../../format/Schema.fbs"; +include "Literal.fbs"; +include "Expression.fbs"; + +namespace org.apache.arrow.computeir.flatbuf; + +/// A data type indicating that a different mapping of columns +/// should occur in the output. +/// +/// For example: +/// +/// Given a query `SELECT b, a FROM t` where `t` has columns a, b, c +/// the mapping value for the projection would equal [1, 0]. +table Remap { + mapping: [FieldIndex] (required); +} + +// Pass through indicates that no output remapping should occur. +table PassThrough {} + +/// A union for the different colum remapping variants +union Emit { + Remap, + PassThrough, +} + +/// An identifier for relations in a query. +/// +/// A table is used here to allow plan implementations optionality. +table RelId { + id: uint64; +} + +/// Fields common to every relational operator +table RelBase { + /// Output remapping of ordinal columns for a given operation + output_mapping: Emit (required); + + /// An identifiier for a relation. The identifier should be unique over the + /// entire plan. Optional. + id: RelId; +} + +/// Filter operation +table Filter { + /// Common options + base: RelBase (required); + /// Child relation + rel: Relation (required); + /// The expression which will be evaluated against input rows + /// to determine whether they should be excluded from the + /// filter relation's output. + predicate: Expression (required); +} + +/// Projection +table Project { + /// Common options + base: RelBase (required); + /// Child relation + rel: Relation (required); + /// Expressions which will be evaluated to produce to + /// the rows of the project relation's output. + expressions: [Expression] (required); +} + +/// A set of grouping keys +table Grouping { + /// Expressions to group by + keys: [Expression] (required); +} + +/// Aggregate operation +table Aggregate { + /// Common options + base: RelBase (required); + /// Child relation + rel: Relation (required); + /// Expressions which will be evaluated to produce to + /// the rows of the aggregate relation's output. + measures: [Expression] (required); + /// Keys by which `aggregations` will be grouped. + /// + /// The nested list here is to support grouping sets + /// eg + /// + /// SELECT a, b, c, sum(d) + /// FROM t + /// GROUP BY + /// GROUPING SETS ( + /// (a, b, c), + /// (a, b), + /// (a), + /// () + /// ); + groupings: [Grouping] (required); +} + +enum JoinKind : uint8 { + Anti, + Cross, + FullOuter, + Inner, + LeftOuter, + LeftSemi, + RightOuter, +} + +/// Join between two tables +table Join { + /// Common options + base: RelBase (required); + /// Left relation + left: Relation (required); + /// Right relation + right: Relation (required); + /// The expression which will be evaluated against rows from each + /// input to determine whether they should be included in the + /// join relation's output. + on_expression: Expression (required); + /// The kind of join to use. + join_kind: JoinKind; +} + +/// Order by relation +table OrderBy { + /// Common options + base: RelBase (required); + /// Child relation + rel: Relation (required); + /// Define sort order for rows of output. + /// Keys with higher precedence are ordered ahead of other keys. + keys: [SortKey] (required); +} + +/// Limit operation +table Limit { + /// Common options + base: RelBase (required); + /// Child relation + rel: Relation (required); + /// Starting index of rows + offset: uint32; + /// The maximum number of rows of output. + count: uint32; +} + +/// The kind of set operation being performed. +enum SetOpKind : uint8 { + Union, + Intersection, + Difference, +} + +/// A set operation on two or more relations +table SetOperation { + /// Common options + base: RelBase (required); + /// Child relations + rels: [Relation] (required); + /// The kind of set operation + set_op: SetOpKind; +} + +/// A single column of literal values. +table LiteralColumn { + /// The literal values of the column + elements: [Literal] (required); +} + +/// Literal relation +table LiteralRelation { + /// Common options + base: RelBase (required); + /// The columns of this literal relation. + columns: [LiteralColumn] (required); +} + +/// An external source of tabular data +table Source { + base: RelBase (required); + name: string (required); + schema: org.apache.arrow.flatbuf.Schema (required); +} + +/// The varieties of relations +union RelationImpl { + Aggregate, + Filter, + Join, + Limit, + LiteralRelation, + OrderBy, + Project, + SetOperation, + Source, +} + +/// A table holding an instance of the possible relation types. +table Relation { + impl: RelationImpl (required); +} + +root_type Relation; -- cgit v1.2.3