表达式求值#

group expressions

枚举

enum class ast_operator : int32_t#

支持的运算符枚举。

值:

enumerator ADD#

运算符 +

enumerator SUB#

操作符 -

enumerator MUL#

操作符 *

enumerator DIV#

运算符 / 使用 lhs 和 rhs 的通用类型

enumerator TRUE_DIV#

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

enumerator FLOOR_DIV#

操作符 / 在提升到64位浮点数后,然后对结果进行取整

enumerator MOD#

操作符 %

enumerator PYMOD#

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

enumerator POW#

lhs ^ rhs

enumerator EQUAL#

操作符 ==

enumerator NULL_EQUAL#

使用Spark规则的operator ==:NULL_EQUAL(null, null) 为真,NULL_EQUAL(null, valid) 为假,且 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#

不小于arg的最小整数值。

enumerator FLOOR#

不大于arg的最大整数值

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#

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

接受一个访问者类。

Parameters:

访问者 – 转换此表达式树的 expression_transformer

Returns:

转换表达式的引用包装器

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

如果表达式可能评估为null,则返回true。

Parameters:
  • left – 表达式的左操作数(与右操作数相同)

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

Returns:

true 如果表达式可能评估为 null,否则为 false

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

如果表达式可能评估为null,则返回true。

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

  • right – 表达式的右操作数

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

Returns:

true 如果表达式可能评估为 null,否则为 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#

返回存储的值。

Template Parameters:

T – 所需的类型

Returns:

存储的值

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

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

Parameters:

s – 用于构造的数值标量

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

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

Parameters:

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

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

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

Parameters:

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

inline generic_scalar_device_view(string_scalar &s)#

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

Parameters:

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

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

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

公共函数

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

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

Template Parameters:

T – 数值标量模板类型

Parameters:

value – 一个数值标量值

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

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

Template Parameters:

T – 时间戳标量模板类型

Parameters:

value – 一个时间戳标量值

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

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

Template Parameters:

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

Parameters:

value – 一个持续时间标量值

inline literal(cudf::string_scalar &value)#

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

Parameters:

value – 一个字符串标量值

inline cudf::data_type get_data_type() const#

获取数据类型。

Returns:

字面量的数据类型

inline generic_scalar_device_view get_value() const#

获取值对象。

Returns:

设备标量对象

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

如果表达式可能评估为null,则返回true。

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

  • right – 表达式的右操作数

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

Returns:

true 如果表达式可能评估为 null,否则为 false

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

检查基础标量是否有效。

Parameters:

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

Returns:

如果基础标量有效,则为 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)#

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

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

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

inline cudf::size_type get_column_index() const#

获取列索引。

Returns:

列引用的列索引

inline table_reference get_table_source() const#

获取表格源。

Returns:

table_reference 包含此列的表的引用

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

获取数据类型。

Parameters:

table – 用于确定类型的表

Returns:

列的数据类型

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

获取数据类型。

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

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

Returns:

列的数据类型

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

如果表达式可能评估为null,则返回true。

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

  • right – 表达式的右操作数

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

Returns:

true 如果表达式可能评估为 null,否则为 false

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

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

公共函数

operation(ast_operator op, expression const &input)#

构造一个新的单目操作对象。

Parameters:
  • op – 操作符

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

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

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

Parameters:
  • op – 操作符

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

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

inline ast_operator get_operator() const#

获取操作符。

Returns:

操作符

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

获取操作数。

Returns:

操作数的向量

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

如果表达式可能评估为null,则返回true。

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

  • right – 表达式的右操作数

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

Returns:

true 如果表达式可能评估为 null,否则为 false

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

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

公共函数

inline column_name_reference(std::string column_name)#

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

Parameters:

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

inline std::string get_column_name() const#

获取列名。

Returns:

此列引用的名称

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

接受一个访问者类。

Parameters:

visitor – 解析此表达式树的 expression_parser

Returns:

此实例的设备数据参考索引

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

如果表达式可能评估为null,则返回true。

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

  • right – 表达式的右操作数

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

Returns:

true 如果表达式可能评估为 null,否则为 false

class tree#
#include <expressions.hpp>

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

公共函数

tree() = default#

构造一个空的抽象语法树

tree(tree&&) = default#

移动抽象语法树。

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

移动分配AST树

Returns:

对移动分配的树的引用

template<typename Expr, typename ...Args>
inline Expr const &emplace(Args&&... args)#

向AST树添加一个表达式。

Parameters:

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

Returns:

对添加的表达式的引用

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

向AST树添加一个表达式。

Parameters:

expr – 要添加的AST表达式

Returns:

对添加的表达式的引用

inline expression const &front() const#

获取树中的第一个表达式

Returns:

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

inline expression const &back() const#

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

Returns:

插入树的最后一个表达式

inline size_t size() const#

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

Returns:

添加到树中的表达式数量

inline expression const &at(size_t index)#

获取树中某个索引处的表达式。索引已检查。

Parameters:

index – 表达式在抽象语法树(ast)中的索引

Returns:

指定索引处的表达式

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

获取树中某个索引处的表达式。索引未检查。

Parameters:

index – 表达式在抽象语法树(ast)中的索引

Returns:

指定索引处的表达式