跳转至

SeaboxMPP函数的执行

SeaboxMPP内置函数类型

SeaboxMPP数据库是由多个SeaboxSQL数据库实例组成的分布式分析型数据库, 相关函数执行具备分布式特点。SeaboxMPP数据库评估SQL表达式中使用的函数和运算符。

某些函数和运算符只允许在Coordinator节点上上执行,因为它们可能导致数据库集群Executor实例中的不一致。

该表描述了SeaboxMPP数据库函数类型。

函数类型 SeaboxMPP是否支持 描述 注释
IMMUTABLE 仅依赖于其参数列表中的信息。给定相同的参数值,始终返回相同的结果。
STABLE 在大多数情况下是的 在单个表扫描中,对相同的参数值返回相同的结果,但结果将通过SQL语句进行更改。 结果取决于数据库查找或参数值。 current_timestamp系列函数是STABLE; 值在执行中不会改变。
VOLATILE 受限制的 函数值可以在单个表扫描中更改。例如: random(), timeofday() 任何具有副作用的函数都是易变的,即使其结果是可预测的。 例如:setval()

Table 1. SeaboxMPP数据库中的函数

在SeaboxMPP数据库中,数据跨Executor分布 - 每个Executor是不同的SeaboxSQL数据库。 为了防止出现不一致或意外的结果,如果它们包含SQL命令或以任何方式修改数据库,则不要在Executor级别执行归类为VOLATILE的函数。 例如,不允许在SeaboxMPP数据库中对分布式数据执行诸如setval()之类的函数,因为它们可能导致Executor实例之间的数据不一致。

为确保数据一致性,可以在Coordinator节点上评估和运行的语句中安全地使用VOLATILESTABLE函数。 例如,以下语句在Coordinator上运行(没有FROM子句的语句):

SELECT setval('myseq', 201);
SELECT foo();

如果语句具有包含分布式表的FROM子句,并且FROM子句中的函数返回一组行,则该语句可以在Executor上运行:

SELECT * from foo();

SeaboxMPP数据库不支持返回表引用(rangeFuncs)的函数或使用refCursor数据类型的函数。