Calcite - Field


Logical Data Modeling - Field in calcite.

You can reference a field (cell) by name or ordinal.

Ordinals are zero-based.

Each operator guarantees the order in which its output fields occur.

For example, Project returns the fields in the generated by each of the scalar expressions.

Once the unique field names have been assigned, the names are immutable.

If a relational expression has passed through several rewrite rules, the field names of the resulting expression might not look much like the originals. At that point it is better to reference fields by ordinal.


RelDataType represents fields in a table (data set) - the data type of an object. Include structs and arrays


Multiple input

Example join between the input EMP and DEPT

  /   \      

The ordinal referencing is:

  • 0=EMP
    • 0=EMPNO,
    • 1=ENAME,
    • 2=JOB,
    • 3=MGR,
    • 4=HIREDATE,
    • 5=SAL,
    • 6=COMM,
    • 7=DEPTNO]
  • 1=DEPT
    • 0=DEPTNO,
    • 1=DNAME,
    • 2=LOC

To reference the field/column SAL (the field 5 of input 0)

builder.field(2, 0, "SAL")
// or
builder.field(2, "EMP", "SAL")
// or
builder.field(2, 0, 5)


  • 2 means that there are two inputs (How deep to search in the stack)
  • 0 or EMP design the input
  • 5 or SAL design the field

Powered by ComboStrap