分析方法分类
C++ 类 Sequence 提供了一组对序列进行操作的分析方法。这些方法从专门的 C API 类型 mco_seq_iterator_t 继承功能,将其作为管理序列字段的“句柄”。请使用下面的链接按类别查看这些功能的描述和示例:
方法 | 说明 |
---|---|
通用函数 | 生成的函数,用于对数据库对象的序列字段执行操作,例如:first、last、append、insert、delete、search、join、count、map、subseq、iterator、from_cursor、project、store |
单目运算 | 单输入序列并生成结果值序列的方法,例如:abs(绝对值)、neg(取反)、match(匹配)。 |
二元运算 | 接受两个输入序列并生成结果值序列的方法,例如:加法、减法、乘法、除法、取模、求最大值、求最小值。 |
比较运算 | 用于比较运算符(==、!=、>、>=、<、<=)的方法,该方法接受两个输入序列,并生成一个布尔值结果序列。 |
逻辑运算 | 从以下逻辑运算符:非、与、或、异或中选取,这些方法接受两个输入序列,并生成一个布尔值的结果序列。 |
压缩运算 | 将两个序列压缩为标量值的方法,例如:加权和、加权平均值、协方差、相关性。 |
条件运算 | 基于条件(如if、cond、filter、filter_pos)对一个或两个输入序列执行操作的方法。 |
操作运算 | 对输入序列执行各种操作的函数。 |
迭代运算 | 从序列迭代器中提取值并重置序列迭代器的函数,例如:next、reset |
顶部运算 | 返回输入序列的顶部元素(或其位置)的函数:top_max、top_min、top_pos_max top_pos_minn |
RLE运算 | 执行运行长度加密 (RLE) 操作的函数:计数、解码is_rle |
聚合运算 | 采用单个输入序列迭代器参数并在结果序列中生成标量值的函数 |
组聚合运算 | 根据参数的值将输入序列拆分为组的函数group_by |
网格聚合运算 | 将输入序列拆分为 interval 参数指定的区间的函数,该参数确定组中的最大元素数 |
窗口聚合运算 | 然而,就像上面所示的 “Grid” 函数一样,interval 参数表示输入序列中的下 N 个元素 |
哈希聚合运算 | 通过对未排序的序列进行分组来对结果序列进行分组的函数 |
累加聚合运算 | 对结果序列中所有前面元素的 average, sum, product, etc. 进行累加的函数 |
其他运算 | 提供排序、排名和直方图功能的函数 |
以上介绍页面中的示例使用以下针对股票报价的数据库模式定义:
#define uint4 unsigned<4>
#define MAX_SYMBOL_LEN 21
declare database stockdb;
class Quote
{
char<MAX_SYMBOL_LEN> symbol;
sequence<date asc> day;
sequence<float> low;
sequence<float> high;
sequence<float> open;
sequence<float> close;
sequence<uint4> volume;
sequence<char<15>> day_str;
unique tree<symbol> by_sym;
};
请注意,此表的主键是字段 symbol
上的唯一索引 by_sym
,除 day_str
字段外,所有其他字段的类型均为序列,其中字段 day
是有序序列。添加 day_str
字段是为了提供存储在字段 day
中的日期类型的方便字符数组表示。通常,对从 Quote 对象中提取的一个或多个序列字段执行分析操作,Quote 对象实际上是“结果集”游标中的“一行”。例如,以下代码片段遍历整个数据库,打印出 Quote 字符字段 symbol
以及序列字段 day
和 high
的值:
mco_trans_h trans;
mco_date day;
mco_cursor_t quote_cursor;
Quote quote;
MCO_RET rc;
rc = mco_trans_start(db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &trans);
if ( MCO_S_OK == rc )
{
/* 遍历所有报价对象 */
Quote::by_sym::cursor(trans, "e_cursor);
for (rc = mco_cursor_first(trans, "e_cursor);
rc != MCO_S_CURSOR_END;
rc = mco_cursor_next(trans, "e_cursor))
{
/* 获得当前对象 */
quote.from_cursor(trans, "e_cursor);
/* 初始化迭代器 */
Sequence<uint4> day_iterator = quote.day_iterator();
Sequence<float> high_iterator = quote.high_iterator();
Sequence< Char<15> > day_str_iterator = quote.day_str_iterator();
/* 迭代序列字段 */
while (day_iterator.next(day))
{
Char<MAX_SYMBOL_LEN> symbol = quote.symbol;
Char<15> day_str = ++day_str_iterator;
printf("%s[%u(%s)]: %f\n", (char*)symbol, day,
(char*)day_str, ++high_iterator);
}
}
mco_trans_commit(trans);
}