表达式求值#
- 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。
-
enumerator ADD#
-
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
-
virtual cudf::size_type accept(detail::expression_parser &visitor) const = 0#
-
class generic_scalar_device_view : public cudf::detail::scalar_device_view_base#
- #include <expressions.hpp>
一种类型擦除的
scalar_device_view
,其值是固定宽度类型或字符串。公共函数
-
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 – 用于构造的字符串标量
-
template<typename T>
-
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 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
-
template<typename T>
-
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 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
-
inline column_reference(cudf::size_type column_index, table_reference table_source = table_reference::LEFT)#
-
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
-
operation(ast_operator op, expression const &input)#
-
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
-
inline column_name_reference(std::string column_name)#
-
class tree#
- #include <expressions.hpp>
一个 AST 表达式树。它拥有并包含多个依赖表达式。当树被销毁时,所有表达式都会被销毁。
公共函数
-
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 树中表达式的索引
- 返回:
指定索引处的表达式
-
tree() = default#
-
enum class ast_operator : int32_t#