表达式求值#

group 表达式求值

枚举

enum class ast_operator : int32_t#

支持的运算符枚举。

enumerator ADD#

运算符 +

enumerator SUB#

运算符 -

enumerator MUL#

运算符 *

enumerator DIV#

运算符 /,使用左侧和右侧的通用类型

enumerator TRUE_DIV#

运算符 /,在将类型提升为浮点类型后

enumerator FLOOR_DIV#

运算符 /,在提升为 64 位浮点类型并向下取整结果后

enumerator MOD#

运算符 %

enumerator PYMOD#

运算符 %,使用 Python 的负数符号规则

enumerator POW#

左侧 ^ 右侧

enumerator EQUAL#

运算符 ==

enumerator NULL_EQUAL#

运算符 ==,使用 Spark 规则:NULL_EQUAL(null, null) 为 true,NULL_EQUAL(null, valid) 为 false,并且 NULL_EQUAL(valid, valid) == EQUAL(valid, valid)

enumerator NOT_EQUAL#

运算符 !=

enumerator LESS#

运算符 <

enumerator GREATER#

运算符 >

enumerator LESS_EQUAL#

运算符 <=

enumerator GREATER_EQUAL#

运算符 >=

enumerator BITWISE_AND#

运算符 &

enumerator BITWISE_OR#

运算符 |

enumerator BITWISE_XOR#

运算符 ^

enumerator LOGICAL_AND#

运算符 &&

enumerator NULL_LOGICAL_AND#

运算符 &&,使用 Spark 规则:NULL_LOGICAL_AND(null, null) 为 null,NULL_LOGICAL_AND(null, true) 为 null,NULL_LOGICAL_AND(null, false) 为 false,并且 NULL_LOGICAL_AND(valid, valid) == LOGICAL_AND(valid, valid)

enumerator LOGICAL_OR#

运算符 ||

enumerator NULL_LOGICAL_OR#

运算符 ||,使用 Spark 规则:NULL_LOGICAL_OR(null, null) 为 null,NULL_LOGICAL_OR(null, true) 为 true,NULL_LOGICAL_OR(null, false) 为 null,并且 NULL_LOGICAL_OR(valid, valid) == LOGICAL_OR(valid, valid)

enumerator IDENTITY#

恒等函数。

enumerator IS_NULL#

检查操作数是否为 null。

enumerator SIN#

三角正弦。

enumerator COS#

三角余弦。

enumerator TAN#

三角正切。

enumerator ARCSIN#

三角反正弦。

enumerator ARCCOS#

三角反余弦。

enumerator ARCTAN#

三角反正切。

enumerator SINH#

双曲正弦。

enumerator COSH#

双曲余弦。

enumerator TANH#

双曲正切。

enumerator ARCSINH#

双曲反正弦。

enumerator ARCCOSH#

双曲反余弦。

enumerator ARCTANH#

双曲反正切。

enumerator EXP#

指数函数 (底数为 e,即欧拉数)

enumerator LOG#

自然对数 (底数为 e)

enumerator SQRT#

平方根 (x^0.5)

enumerator CBRT#

立方根 (x^(1.0/3))

enumerator CEIL#

不小于参数的最小整数值。

enumerator FLOOR#

不大于参数的最大整数值

enumerator ABS#

绝对值。

enumerator RINT#

将浮点参数 arg 四舍五入到整数值。

enumerator BIT_INVERT#

按位非 (~)

enumerator NOT#

逻辑非 (!)

enumerator CAST_TO_INT64#

将值转换为 int64_t。

enumerator CAST_TO_UINT64#

将值转换为 uint64_t。

enumerator CAST_TO_FLOAT64#

将值转换为 double。

enum class table_reference#

表引用枚举。

这确定了在涉及两个表的情况下(例如连接)使用哪个表。

enumerator LEFT#

左表中列的索引。

enumerator RIGHT#

右表中列的索引。

enumerator OUTPUT#

输出表中列的索引。

struct expression#
#include <expressions.hpp>

一个可以求值以返回值的通用表达式。

此类与 expression_parser 类是“访问者”模式的一部分。继承自此类的表达式可以接受解析器作为访问者。

子类包括 cudf::ast::column_name_reference, cudf::ast::column_reference, cudf::ast::literal, cudf::ast::operation

公共函数

virtual cudf::size_type accept(detail::expression_parser &visitor) const = 0#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const = 0#

接受一个访问者类。

参数:

visitor – 转换此表达式树的 expression_transformer

返回:

转换后表达式的引用包装器

inline bool may_evaluate_null(table_view const &left, rmm::cuda_stream_view stream) const#

如果表达式可能求值为 null,则返回 true。

参数:
  • left – 表达式的左操作数 (也用作右操作数)

  • stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果表达式可能求值为 null,则为 true,否则为 false

virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const = 0#

如果表达式可能求值为 null,则返回 true。

参数:
  • left – 表达式的左操作数

  • right – 表达式的右操作数

  • stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果表达式可能求值为 null,则为 true,否则为 false

class generic_scalar_device_view : public cudf::detail::scalar_device_view_base#
#include <expressions.hpp>

一种类型擦除的 scalar_device_view,其值是固定宽度类型或字符串。

公共函数

template<typename T>
inline T const value() const noexcept#

返回存储的值。

模板参数:

T – 所需类型

返回:

存储的值

template<typename T>
inline generic_scalar_device_view(numeric_scalar<T> &s)#

从数值标量构造一个新的通用标量设备视图对象。

参数:

s – 用于构造的数值标量

template<typename T>
inline generic_scalar_device_view(timestamp_scalar<T> &s)#

从时间戳标量构造一个新的通用标量设备视图对象。

参数:

s – 用于构造的时间戳标量

template<typename T>
inline generic_scalar_device_view(duration_scalar<T> &s)#

从持续时间标量构造一个新的通用标量设备视图对象。

参数:

s – 用于构造的持续时间标量

inline generic_scalar_device_view(string_scalar &s)#

从字符串标量构造一个新的通用标量设备视图对象。

参数:

s – 用于构造的字符串标量

class literal : public cudf::ast::expression#
#include <expressions.hpp>

抽象语法树中使用的字面值。

公共函数

template<typename T>
inline literal(cudf::numeric_scalar<T> &value)#

构造一个新的字面值对象。

模板参数:

T – 数值标量模板类型

参数:

value – 数值标量值

template<typename T>
inline literal(cudf::timestamp_scalar<T> &value)#

构造一个新的字面值对象。

模板参数:

T – 时间戳标量模板类型

参数:

value – 时间戳标量值

template<typename T>
inline literal(cudf::duration_scalar<T> &value)#

构造一个新的字面值对象。

模板参数:

T – 持续时间标量模板类型

参数:

value – 持续时间标量值

inline literal(cudf::string_scalar &value)#

构造一个新的字面值对象。

参数:

value – 字符串标量值

inline cudf::data_type get_data_type() const#

获取数据类型。

返回:

字面值的数据类型

inline generic_scalar_device_view get_value() const#

获取值对象。

返回:

设备标量对象

virtual cudf::size_type accept(detail::expression_parser &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#

如果表达式可能求值为 null,则返回 true。

参数:
  • left – 表达式的左操作数

  • right – 表达式的右操作数

  • stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果表达式可能求值为 null,则为 true,否则为 false

inline bool is_valid(rmm::cuda_stream_view stream) const#

检查底层标量是否有效。

参数:

stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果底层标量有效,则为 true

class column_reference : public cudf::ast::expression#
#include <expressions.hpp>

引用表中某一列数据的表达式。

公共函数

inline column_reference(cudf::size_type column_index, table_reference table_source = table_reference::LEFT)#

构造一个新的列引用对象。

参数:
  • column_index – 此列在表中的索引 (在表达式求值时提供)。

  • table_source – 在涉及两个表的情况下(例如连接)使用哪个表

inline cudf::size_type get_column_index() const#

获取列索引。

返回:

列引用的列索引

inline table_reference get_table_source() const#

获取表源。

返回:

table_reference 包含此列的表的引用

inline cudf::data_type get_data_type(table_view const &table) const#

获取数据类型。

参数:

table – 用于确定类型的表

返回:

列的数据类型

inline cudf::data_type get_data_type(table_view const &left_table, table_view const &right_table) const#

获取数据类型。

参数:
  • left_table – 用于确定类型的左表

  • right_table – 用于确定类型的右表

返回:

列的数据类型

virtual cudf::size_type accept(detail::expression_parser &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#

如果表达式可能求值为 null,则返回 true。

参数:
  • left – 表达式的左操作数

  • right – 表达式的右操作数

  • stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果表达式可能求值为 null,则为 true,否则为 false

class operation : public cudf::ast::expression#
#include <expressions.hpp>

操作表达式包含一个运算符和零个或多个操作数。

公共函数

operation(ast_operator op, expression const &input)#

构造一个新的一元操作对象。

参数:
  • op – 运算符

  • input – 输入表达式 (操作数)

operation(ast_operator op, expression const &left, expression const &right)#

构造一个新的二元操作对象。

参数:
  • op – 运算符

  • left – 左输入表达式 (左操作数)

  • right – 右输入表达式 (右操作数)

inline ast_operator get_operator() const#

获取运算符。

返回:

运算符

inline std::vector<std::reference_wrapper<expression const>> const &get_operands() const#

获取操作数。

返回:

操作数向量

virtual cudf::size_type accept(detail::expression_parser &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#

如果表达式可能求值为 null,则返回 true。

参数:
  • left – 表达式的左操作数

  • right – 表达式的右操作数

  • stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果表达式可能求值为 null,则为 true,否则为 false

class column_name_reference : public cudf::ast::expression#
#include <expressions.hpp>

引用表中某一列数据的表达式。

公共函数

inline column_name_reference(std::string column_name)#

构造一个新的列名引用对象。

参数:

column_name – 此列在表元数据中的名称(在表达式求值时提供)。

inline std::string get_column_name() const#

获取列名。

返回:

此列引用的名称

virtual cudf::size_type accept(detail::expression_parser &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#

接受一个访问者类。

参数:

visitor – 解析此表达式树的 expression_parser

返回:

此实例的设备数据引用索引

inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#

如果表达式可能求值为 null,则返回 true。

参数:
  • left – 表达式的左操作数

  • right – 表达式的右操作数

  • stream – 用于设备内存操作和内核启动的 CUDA 流

返回:

如果表达式可能求值为 null,则为 true,否则为 false

class tree#
#include <expressions.hpp>

一个 AST 表达式树。它拥有并包含多个依赖表达式。当树被销毁时,所有表达式都会被销毁。

公共函数

tree() = default#

构造一个空的 AST 树

tree(tree&&) = default#

移动 AST 树。

tree &operator=(tree&&) = default#

移动赋值 AST 树

返回:

对移动赋值的树的引用

template<typename Expr, typename ...Args>
inline std::enable_if_t<std::is_base_of_v<expression, Expr>, Expr const&> emplace(Args&&... args)#

向 AST 树添加一个表达式。

参数:

args – 用于构造 AST 表达式的参数

返回:

对添加的表达式的引用

template<typename Expr>
inline push(Expr expr)#

向 AST 树添加一个表达式。

参数:

expr – 要添加的 AST 表达式

返回:

对添加的表达式的引用

inline expression const &front() const#

获取树中的第一个表达式

返回:

插入到树中的第一个表达式

inline expression const &back() const#

获取树中的最后一个表达式

返回:

插入到树中的最后一个表达式

inline size_t size() const#

获取添加到树中的表达式数量

返回:

添加到树中的表达式数量

inline expression const &at(size_t index)#

获取树中指定索引处的表达式。索引已检查。

参数:

index – AST 树中表达式的索引

返回:

指定索引处的表达式

inline expression const &operator[](size_t index) const#

获取树中指定索引处的表达式。索引未检查。

参数:

index – AST 树中表达式的索引

返回:

指定索引处的表达式