分析函数库示例
下表列出了使用基于向量的分析函数库的多个示例。第一个示例展示了如何使用 C API 的“管道”函数调用计算经拆股调整后的收盘价;然后将其与执行相同计算的 SQL 选择语句进行比较。由于 SQL API 更加简洁,因此其余示例均使用 SQL API。
SQL 语法扩展:@ 运算符
示例 3 至 14 展示了使用序列的 SELECT 语句的风格,或者通常所说的“时间序列”。其中一些示例使用了对标准 SQL 语法的扩展,以便更简洁地表达函数调用的“管道”。SmartESQL 增加了序列操作符 @,这是一个多态操作符,用于根据另一个序列计算的结果来映射、投影或排序序列。
为了说明这种用法,请考虑以下三个序列查询:
select seq_sort(volume, 'asc') as by_volume,
seq_order_by(open, by_volume),
seq_order_by(close, by_volume)
from Instrument where name='ABB';
select seq_top_pos_max(close, 3) as top_price,
seq_map(open, top_price),
seq_map(close, top_price),
seq_map(high, top_price),
seq_map(low, top_price)
from Instrument;
select max_price
from ( select seq_search(hdate, 20100101, 20100331) as quarter,
seq_max(seq_project(close, quarter)) as max_price
from Instrument where name='ABB');
这些语句可以使用 @ 运算符按如下方式书写:
select seq_sort(volume, 'asc') as by_volume, open@by_volume, close@by_volume
from Instrument where name='ABB';
select seq_top_pos_max(close, 3) as top_price, open@top_price, close@top_price, high@top_price, low@top_price
from Instrument;
select max_price
from ( select seq_search(hdate, 20100101, 20100331) as quarter,
seq_max(close@quarter) as max_price
from Instrument where name='ABB');
请注意,如果“@”操作符的右部是指 seq_sort() 的结果,则“@”调用 seq_order_by();如果右部是指 seq_search() 的结果,则“@”调用 seq_project();如果右部是指返回序列中元素位置的某些操作符的结果,例如 seq_top_pos_max(),则“@”调用 seq_map()。
关键字 "flattened"
关键字“flattened”是一个扩展,它将序列字段转换为表,这样结果集就会以每个序列元素集对应的单独行的形式出现,并且类的标量字段的值在每行中重复出现。(请参见下面的示例 3。)
示例数据和脚本
对于示例 3 至 14,我们在一个简单的数据库类上执行查询:
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;
unique tree<symbol> by_sym;
};
以下示例中的数据取自 2013 年 IBM 的历史值。此示例数据以及一组执行以下示例中选择语句的脚本和 shell 命令文件包含在 SmartEDB for HPC 示例目录 samples/xsql/scripts/financial 中。要重现任何示例,请运行 x.bat(在 Linux 系统上为 x.sh),并指定示例编号。例如,要在 scripts/financial 作为当前工作目录的情况下运行示例 7,只需键入:
x 7
命令文件会调用 xSQL 并使用适当的 SQL 脚本。(请注意,xSQL 的输出在大多数情况下与下面打印的内容格式不同,因为我们在本文中重新格式化了文本并突出显示了特定元素,以帮助描述正在执行的操作。)
示例
请使用以下链接查看每个示例的详细信息:
示例 | 说明 |
---|---|
示例 1 | 调整拆股后的历史收盘价 |
示例 2 | 量加权平均买入价和卖出价 |
示例 3 | 序列区间 |
示例 4 | 序列上的算术运算 |
示例 5 | 筛选序列元素 |
示例 6 | 相关性 |
示例 7 | 聚合最大值 |
示例 8 | 窗口聚合 |
示例 9 | 网格聚合 |
示例 10 | 组聚合求和 |
示例 11 | 哈希聚合平均值 |
示例 12 | 排序序列元素 |
示例 13 | 顶部取值 |
示例 14 | 值加权平均 |