我的知识星球里有朋友提问:
我的场景是cds 调用 table function, table function 调用 amdp 然后报错:
code:CX_SQL_EXCEPTION message: feature not supported.Contains predicates only supported when table function is unfolded?
请问这个是什么意思???当我debug amdp的时候也没有报错
我们就着错误消息逐一分析。
feature not supported - 功能不支持。
具体什么功能不支持?Contains predicates only supported
Contains 这个 Predicates 功能不支持。
什么是 Contains
Predicates?
请看 SAP 帮助文档。
我们看一下这个帮助文档的层级结构,发现它位于 SAP HANA Platform 的 FUZZY Search 下面,说明这是一个和 HANA 平台模糊搜索相关的功能:
在计算机科学中,Predicate 实际就是一个函数或者 SQL 语句,返回类型为布尔值,真或者假。
HANA SQL Script 里这个例子 ...WHERE CONTAINS(col, 'search term', FUZZY(0.7))...
,如果施加在一个数据类型的表列(Table Column) 上,返回 Fuzzy 分数大于或等于 0.7 的所有值。
Contains predicates only supported when table function is unfolded
字面意思,只有一个 unfolded
table function 内部才允许使用 Contains
这个 predicate 功能。
那么什么是 unfolded table function?
根据 unfold 关键字查询:
可以看到 HANA Calculation View,Query 等模型都支持 unfold
操作。
如何判断一个 query 执行过程中是否发生了 unfolded
?
SAP 官网:
开发人员可以使用 Explain Plan
功能检查 Query 是否 unfold
. 如果查询中使用的所有表都出现在 Plan 中,则说明 Unfold
成功发生。
下面的示例显示了在 Caculation View 上执行的查询的 Explain Plan. k-匿名节点被投影节点(Projection Node)取代。 因此 Unfold 在默认情况下发生,所有涉及的表都显示在 Plan 中:
回到本文标题的错误,只有在 table function 执行时发生了 unfold,才支持 CONTAINS 这个 predicate.
但是 table function 在什么情况下才会 unfold?需要继续研究。