【SAP HANA 13】SQL 分页(示例)

本文介绍了在SAP HANA 13中如何进行SQL分页操作,并详细讲解了分页总数的不同统计方法,对于理解和实现高效的数据检索具有指导意义。

分页 

SELECT * FROM (   
 SELECT A.*, ROW_NUMBER() OVER(ORDER BY A.START_TIME DESC) RN 
 FROM (  
       	SELECT T.START_TIME FROM WIP.SFC T
		
   ) A   ORDER BY A.START_TIME DESC 
)  
WHERE RN BETWEEN 0 AND 30 

分页总数的统计方式

--Total 
SELECT TOP 1 A2.INDEX_COUNT TOTAL_RECORDS FROM (
   SELECT ROW_NUMBER() OVER(ORDER BY A1.START_TIME DESC) INDEX_COUNT  
   FROM (   
       	SELECT T.START_TIME FROM WIP.SFC T 
   ) A1  
) A2 
ORDER BY A2.INDEX_COUNT DESC 

<think> 嗯,用户想了解SAP HANA CE函数的相关信息,这个问题其实很有技术深度。从用户提供的站内引用来看,ta应该已经有了一定的SAP HANA基础,现在想深入理解CE函数这个特定模块。 用户可能正在做性能优化相关的工作,因为引用[2]特别提到了CE函数的效率优势。不过ta可能没意识到这个技术现在处于维护状态,引用[1]说得很清楚,从HANA SPS05开始就没有新功能了。这个信息对用户决策很重要,得放在开篇强调。 关于技术细节部分,需要重点解释三个层面:首先是CE函数的本质是绕过SQL处理器直接操作存储引擎,这个架构特性决定了它的优缺点;然后要说明典型用法,像CE_PROJECTION这种核心函数必须举例;最后必须提醒限制条件,特别是混合使用时的性能陷阱——引用[2]里那个引擎间数据传递的问题在实际开发中经常被忽视。 注意到用户提供了rowid的引用[3],虽然不直接相关,但说明ta可能在处理分页或行定位需求。因此考虑在相关问题里加入rowid的衔接问题,这样既能延续当前主题,又照顾到用户可能的后续需求。 准备在回答结构上这样安排:先用时间线说明CE函数的现状,再分优缺点阐述技术特性,接着给出典型代码示例,最后附注意事项。特别要把“避免混合SQL”这个警告加粗显示,很多开发人员栽在这个点上。 用户没有问但可能想知道的是:既然CE函数不再更新,那替代方案是什么?所以考虑在相关问题里加入开源替代方案的选项。 </think> 以下是关于 SAP HANA **CE函数(Calculation Engine Functions)** 的详细介绍,结合引用内容和关键技术要点: --- ### **一、CE函数概述** 1. **定位与作用** CE函数是SAP HANA底层计算引擎(Calculation Engine)的直接接口,允许绕过SQL处理器执行高性能操作。适用于对海量数据进行**低延迟处理**的场景,尤其在OLAP和实时分析中优势显著[^2]。 2. **发展现状** - 自 **HANA SPS05** 版本后,CE函数**不再有新功能更新**,官方转向优化SQLScript和核心引擎[^1]。 - 主要因SAP主力产品(如BW、Business Suite)未深度依赖CE技术,导致其开发优先级降低[^1]。 --- ### **二、核心特性与优势** 1. **性能优势** - 直接由计算引擎处理,**减少SQL解析开销**,例如: ```sql product3 = CE_PROJECTION(:product1, ["NAME","COLOR","PRICE", CE_CALC('rownum()',integer) as "ROWNUM"], '"ROWNUM"<5'); ``` 此操作比等效SQL语句执行更快[^2]。 2. **常用函数示例** | 函数名 | 作用 | 等效SQL操作 | |------------------|------------------------|------------------| | `CE_PROJECTION` | 列筛选与计算 | `SELECT` | | `CE_JOIN` | 内连接/左连接 | `INNER JOIN` | | `CE_UNION_ALL` | 合并结果集(不去重) | `UNION ALL` | | `CE_CALC` | 动态计算表达式 | 计算字段 | --- ### **三、使用限制与注意事项** 1. **功能局限性** - **不支持完整SQL语法**:例如缺失 `UNION`(仅支持`UNION_ALL`)、无原生`FULL OUTER JOIN`[^2]。 - 需通过组合其他CE函数实现复杂逻辑(如外连接需用`CE_LEFT_OUTER_JOIN` + `CE_RIGHT_OUTER_JOIN`模拟)。 2. **关键使用原则** - **避免混合引擎操作**:CE函数与标准SQL语句**不可混合使用**,否则因数据在计算引擎(CE)和SQL引擎间反复传递导致性能下降[^2]。 - **优先独立使用**:在SQLScript中封装纯CE函数调用链以实现最优性能。 --- ### **四、替代方案与演进** 1. **现代HANA的替代技术** - **SQLScript优化**:SAP推荐使用**存储过程**中的SQLScript,其编译器已深度优化,性能接近CE函数。 - **核心引擎增强**:HANA 2.0后列存储引擎的计算下推能力显著提升,标准SQL亦可高效执行。 2. **适用场景建议** - **遗留系统维护**:现有使用CE函数的代码无需立即重构,但新开发应优先选择SQLScript[^1][^2]。 - **极端性能需求**:若需亚秒级响应且SQL无法满足,可评估CE函数(注意技术冻结风险)。 --- ### **代码示例:获取RowID的CE实现** 若需在CE函数中模拟行号(类似SQL `ROW_NUMBER()`),可结合`CE_CALC`: ```sql -- 使用CE函数生成行号并筛选 output = CE_PROJECTION(:input, [*, CE_CALC('rownum()', INTEGER) AS "ROWNUM"], '"ROWNUM" BETWEEN 1 AND 100'); ``` > **注意**:原生获取RowID需通过`$rowid$`(物理地址),但CE函数无直接等价操作[^3]。 --- ### **相关问题** 1. CE函数在HANA 2.0中是否完全被弃用?新项目是否应避免使用? 2. 如何将现有CE函数代码迁移到SQLScript?迁移过程中有哪些性能陷阱? 3. CE函数与HANA的列存储计算下推机制有何异同? 4. 除了`rownum()`,CE函数还有哪些特有的计算函数不可用SQL替代? > 参考资料: > [^1]: SAP HANA CE Function历史演进与技术定位 > [^2]: SAP HANA SQLScript Reference (CE函数章节) > [^3]: SAP HANA RowID操作指南
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰舟轻帆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值