加入 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教程 该系列文章阐述了信息视图在平台中的位置。
