加入 SAP HANA:类型、语法和示例

⚡ 智能摘要

SAP HANA 连接表和信息视图,使模型能够精确返回报表所需的行。内部连接、外部连接、引用连接、文本连接、时间连接和空间连接等类型都会影响性能、基数处理和结果大小。

  • 🔗 范围: 连接将图形模型中的表和信息视图以及数据库中的纯 SQL 语句连接起来。
  • ☑️ 标准类型: 内连接、左外连接、右外连接和全外连接的行为与 ANSI SQL 中的行为完全相同。
  • 仅建模类型: 引用连接和文本连接仅存在于信息视图中,没有对应的 SQL 关键字。
  • 🧪 高级节点: 时间连接、空间连接、动态连接和星型连接将计算视图扩展到简单的列匹配之外。
  • 🛠️ 性能杠杆: 基数和“优化连接列”标志决定是否 SAP HANA 可以在运行时修剪表。
  • 📈 现代化: 属性视图和分析视图已被弃用,因此新的连接应在图形计算视图中进行。

连接类型用于将表和信息视图组合在一起 SAP HANA

什么是 SAP HANA 加入?

加入 SAP HANA 将来自两个或多个表,或来自一个表和一个信息视图的行合并在一起,并返回查询所需的值。连接可以在信息视图的连接节点中以图形方式定义,也可以直接在数据库上运行的 SQL 语句中编写。

这两种形式并不相同。内部连接 计算视图 由……执行 SAP HANA 计算引擎可以在没有请求的列来自某个表时跳过该表,而用 HANA 编写的连接则不然。 SAP HANA SQL 总是完全按照代码执行。

当以下连接类型可用时 SAP HANA 表和信息视图相结合。

联接类型 使用 评论
内蒙古 内连接选择两个表中匹配的记录集。 两侧没有对应行的行将被舍弃。
左外连接 左外连接从第一个表中选择所有记录,并从第二个表中选择与之匹配的记录(如果存在)。 如果第二个表中不存在匹配项,则其列将返回空值。
右外连接 右外连接从第二个表中选择所有记录,并从第一个表中选择与之匹配的记录(如果存在)。 如果第一个表中不存在匹配项,则其列将返回空值。
全外连接 全外连接会选择两个表中的所有记录。 两侧不匹配的行将用空值填充。
引用连接 其行为类似于内连接,前提是两个表之间保持引用完整性。 可在属性视图、分析视图和计算视图连接节点中使用。
文本连接 文本连接使用文本表中的语言列,选择属于某个键的特定语言描述。 语言列(通常为 SPRAS)必须在连接属性中标记。

引用连接和文本连接仅存在于建模中。它们存在于信息视图的连接节点中,在 SQL 中没有对应的关键字,因此它们出现在…… SAP HANA建模 工具而不是 SELECT 语句。

SAP HANA 连接语法和 SQL 示例

内连接和外连接是用以下方式编写的: SAP HANA SQL 采用标准 ANSI 语法,因此在其他关系数据库上测试过的查询通常可以直接运行。以下示例将销售订单表连接到客户表,然后再连接到州/省/自治区表。

SELECT so.ORDER_ID, c.NAME, s.STATE_NAME, so.AMOUNT
FROM SALES_ORDER AS so
INNER JOIN CUSTOMER AS c
  ON so.CUSTOMER_ID = c.CUSTOMER_ID
LEFT OUTER JOIN STATE AS s
  ON c.STATE_CODE = s.STATE_CODE
WHERE so.AMOUNT > 1000
ORDER BY so.ORDER_ID;

内连接会删除所有缺少客户主记录的销售订单。左外连接会保留所有剩余订单,即使州代码没有描述,并对这些行返回空的州名称。交换ping 因此,这两种连接类型会改变行数,而不仅仅是显示的列数。

图形模型无需 SQL 即可达到相同的结果。在视图编辑器中,将连接节点放置在两个数据源之间,映射构成连接条件的列,并在节点属性中设置连接类型和基数。 SAP HANA 工作室 编辑器和基于浏览器的建模器都会根据这些设置生成运行时 SQL。

高级连接类型 SAP HANA 计算视图

计算视图添加了纯 SQL 无法用单个关键字表达的连接行为。这些选项可以在连接节点上配置,也可以通过专用节点类型进行配置。

联接类型 它做什么 典型用途
时间连接 使用主数据源的 from 和 to 字段,将交易记录与给定日期有效的主数据版本进行匹配。 随时间变化的主数据,例如所有权发生变更的成本中心。连接类型必须为引用连接,且键必须是日期、时间戳或整数。
空间连接 使用空间谓词(例如相交或内部)将两个源按几何列连接起来,而不是使用相等条件。 例如,进行地理分析,将客户位置与销售区域进行匹配。
动态连接 在运行时,根据查询实际请求的连接列构建连接条件,并在执行连接之前聚合剩余列。 查询粒度可变的多列连接。必须至少请求一个连接列,否则查询将失败。
星形加入 将一个事实源连接到单个节点中的多个维度计算视图。 星型模式模型取代了旧的分析视图。

动态连接改变的是操作顺序,而不是匹配规则。在静态连接中,每个已定义的列都会参与条件判断,聚合操作随后进行;而在动态连接中,未请求的列会先进行聚合,这通常会返回更少的行数和不同的总数。因此,两者回答的是不同的业务问题,所以设置此标志是出于有意为之,而非出于通用优化的目的。

如何选择正确的连接类型 SAP HANA 建模

连接选择会影响正确性和运行时间,速度最快的连接是…… SAP HANA 无需执行任何操作。以下规则涵盖了大多数建模决策。

  • 参照连接 — 仅当保证一侧的每一行都有对应行时才使用,因为当没有请求连接表中的任何列时,引擎可能会完全省略连接。
  • 内部联接 — 当引用完整性无法保证且必须排除不匹配的行时,请使用此方法。
  • 左外连接 — 当第一个表决定结果,但缺失的主数据仍必须显示时,请使用此表。
  • 全外连接 — 谨慎使用,因为它是最昂贵的选择,而且在报告模型中很少需要。
  • 文本加入 — 当描述列取决于登录语言时,请使用它。

节点的两个属性与连接类型本身同样重要。基数(1:1、1:n、n:1 或 n:m)告诉引擎预期每侧有多少行,而“建议基数”函数则根据数据推导出该值。“优化连接列”标志随后允许 SAP 当查询不需要连接列时,HANA 会将其从执行计划中移除。错误的基数可能会导致度量值被静默复制,因此 HANA 会根据数据进行验证,而不是简单地假设。

另一个限制因素影响着新的开发。属性视图和分析视图已被弃用,而且 SAP 建议将它们转换为图形化计算视图,因此,如今设计的连接通常构建在计算视图连接或星形连接节点中。当需要维护现有模型时,了解旧对象的背景信息仍然很有用。 属性视图分析视角 页面描述了这些连接的配置方式。 SAP 学习资料 连接节点 涵盖了相同的行为 SAP HANA Cloud 及更广泛的 SAP HANA教程 该系列文章阐述了信息视图在平台中的位置。

常见问题

基数(1:1、1:n、n:1、n:m)告诉引擎预期每侧有多少行匹配。它支持连接剪枝并保护聚合。建议基数会从数据中推导出设置,这比猜测更安全。

它让 SAP 当客户端查询从未请求过某个连接列时,HANA 会从执行计划中删除该列。列数越少,组就越少。pings 和更快的运行速度,但如果删除的列影响了聚合级别,结果可能会改变。

现有对象仍可运行,但两种视图类型均已弃用,不能添加到新的计算视图中。 SAP 建议将它们转换为图形计算视图,其中提供了相同的连接类型以及星形连接和空间连接。

它必须保留来自双方的不匹配行,因此不会对任何表进行修剪,并且每一行都会被物化。相比之下,当查询不需要连接表中的任何列时,引用连接可能会被完全跳过。

文本表中的语言列,通常为 SPRAS。 SAP 表在连接属性中被标记。 SAP HANA 会根据会话语言筛选描述,因此一个模型即可服务于所有登录语言,而无需单独的视图。

是的。连接节点接受表、表函数和其他计算视图作为数据源,维度视图就是这样附加到事实表的。列名可能不同,因为连接条件会显式地映射列。

机器学习分析列值以建议连接键和基数,标记连接后度量值膨胀的模型,并将近似重复的视图聚类。 SAP 该平台还嵌入了预测和生成服务,因此评分与建模数据并行运行。

Copilot 能高效地生成标准 SQL 连接,并加快重复 SELECT 语句的执行速度。但它并不了解模式的引用完整性,因此连接类型、基数以及诸如文本连接等仅用于建模的选项仍需根据实际数据进行验证。

总结一下这篇文章: