Skip to content

Latest commit

 

History

History
166 lines (136 loc) · 4.24 KB

expression.md

File metadata and controls

166 lines (136 loc) · 4.24 KB
title slug date keyword license
Expression system of Apache Gravitino
/expression
2024-02-02
expression function field literal reference
This software is licensed under the Apache License version 2.

import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';

This page introduces the expression system of Apache Gravitino. Expressions are vital component of metadata definition, through expressions, you can define default values for columns, function arguments for function partitioning, bucketing, and sort term of sort ordering in tables. Gravitino expression system divides expressions into three basic parts: field reference, literal, and function. Function expressions can contain field references, literals, and other function expressions.

Field reference

Field reference is a reference to a field in a table. The following is an example of creating a field reference expression, demonstrating how to create a reference for the student field.

[
  {
    "type": "field",
    "fieldName": [
      "student"
    ]
  }
]
NamedReference field = NamedReference.field("student");

Literal

Literal is a constant value. The following is an example of creating a literal expression, demonstrating how to create a NULL literal and three different data types of literal expressions for the value 1024.

[
  {
    "type": "literal",
    "dataType": "null",
    "value": "null"
  },
  {
    "type": "literal",
    "dataType": "integer",
    "value": "1024"
  },
  {
    "type": "literal",
    "dataType": "string",
    "value": "1024"
  },
  {
    "type": "literal",
    "dataType": "decimal(10,2)",
    "value": "1024"
  }
]
Literal<?>[] literals =
    new Literal[] {
    Literals.NULL,
    Literals.integerLiteral(1024),
    Literals.stringLiteral("1024"),
    Literals.decimalLiteral(Decimal.of("1024", 10, 2))
    };

Function expression

Function expression represents a function call with/without arguments. The arguments can be field references, literals, or other function expressions. The following is an example of creating a function expression, demonstrating how to create function expressions for rand() and date_trunc('year', birthday).

[
  {
    "type": "function",
    "funcName": "rand",
    "funcArgs": []
  },
  {
    "type": "function",
    "funcName": "date_trunc",
    "funcArgs": [
      {
        "type": "literal",
        "dataType": "string",
        "value": "year"
      },
      {
        "type": "field",
        "fieldName": [
          "birthday"
        ]
      }
    ]
  }
]
FunctionExpression[] functionExpressions =
        new FunctionExpression[] {
          FunctionExpression.of("rand"),
          FunctionExpression.of("date_trunc", Literals.stringLiteral("year"), NamedReference.field("birthday"))
        };

Unparsed expression

Unparsed expression is a special type of expression, currently serves exclusively for presenting the default value of a column when it's unsolvable. The following shows the data structure of an unparsed expression in JSON and Java, enabling easy retrieval of its value.

{
  "type": "unparsed",
  "unparsedExpression": "(curdate() + interval 1 year)"
}
// The result of the following expression is a string "(curdate() + interval 1 year)"
String unparsedValue = ((UnparsedExpression) expressino).unparsedExpression();