首页 > 解决方案 > 从 SAP BO 到 Spark Thrift Server 的 SYNTHJOIN 查询

问题描述

当前架构:

在我们当前的架构中,我们使用 Hadoop 文件系统以 Parquet 文件格式存储我们的报告数据,我们是 Spark Thrift 服务器,通过 SQL 接口 (JDBC/ODBC) 公开这些数据。使用此界面,SAP BO 被配置为为报告提取数据。

BO 版本:SAP BO 4.2 SP07

火花版本:2.1.0

当前行为:

我们的一份报告生成了一个中等级别的查询,其中包含 28 个连接(显示在查询面板中)。

但是当报表在 Webi 中运行时,我们看到在 Spark 中触发了一个不同的查询(核心逻辑相同),每个字段、表和连接都添加了复杂而长的字符串别名(下面是两列的片段)。

`SYNTHJOIN_9445517e`.`SYNTHJOIN_e7712c1dSYNTHJOIN_ae302cd9bi_financial_timeFINANCIAL_DATE` `_SYNTHJOIN_9445517e___SYNTHJOIN_e7712c1dSYNTHJOIN_ae302cd9bi_financial_timeFINANCIAL_DATE_`,

`SYNTHJOIN_9445517e`.`SYNTHJOIN_e7712c1dSYNTHJOIN_ae302cd9SYNTHJOIN_f7386c62SYNTHJOIN_12a564e7SYNTHJOIN_e7907874SYNTHJOIN_151b5d6fSYNTHJOIN_cc7708b9SYNTHJOIN_9a61ffc9SYNTHJOIN_425d41fbbi_marketMARKET_LEVEL_1` `_SYNTHJOIN_9445517e___SYNTHJOIN_e7712c1dSYNTHJOIN_ae302cd9SYNTHJOIN_f7386c62SYNTHJOIN_12a564e7SYNTHJOIN_e7907874SYNTHJOIN_151b5d6fSYNTHJOIN_cc7708b9SYNTHJOIN_9a61ffc9SYNTHJOIN_425d41fbbi_marketMARKET_LEVEL_1_`

问题:

  1. 我可以理解为什么在查询中添加长别名的原因吗?
  2. 由于 Spark 2.1.0 仅支持 64k 字节的查询值 ( https://issues.apache.org/jira/browse/SPARK-19796 ),因此基于此查询生成的查询跨越了 64K 值。所以火花工作越来越失败。我们希望减少并保持这些别名简单明了,以避免这个 64K 障碍。请建议我们在 SAP BO 中缺少的任何配置?
  3. 我们还注意到 SAP BO 正在生成一个冗长的子查询而不是简单的连接查询,SAP BO 中是否有任何配置可以将查询面板中显示的查询触发到数据库而不是爆炸查询?

标签: sqliteapache-sparkbusiness-objectsmaprspark-thriftserver

解决方案


由于我们能够解决它,我想回答我的问题。

  1. 我可以理解为什么在查询中添加长别名的原因吗?

这是由于 SAP BO 提供的 Spark Simba 驱动程序的行为所致。SAP BO 提供了一个固定的 Driver,post 中所有的查询都是正常的,没有任何额外的别名。

  1. 由于 Spark 2.1.0 仅支持 64k 字节的查询值 ( https://issues.apache.org/jira/browse/SPARK-19796 ),因此基于此查询生成的查询跨越了这个 64K 值。所以火花工作越来越失败。我们希望减少并保持这些别名简单明了,以避免这个 64K 障碍。请建议我们在 SAP BO 中缺少的任何配置?

我们还从 Apache Spark 2.2 获得了修复,以支持超过 64K 字节的查询。

  1. 我们还注意到 SAP BO 正在生成一个冗长的子查询而不是简单的连接查询,SAP BO 中是否有任何配置可以将查询面板中显示的查询触发到数据库而不是爆炸查询?

即使没有来自 SAP(固定驱动程序 jar)的修复,我们也能够通过更新 spark simba SBO 文件来选择 {BO 安装路径}/sap_bobj/enterprise_xi40/dataAccess/connectionServer/ 中可用的通用 JDBC 驱动程序的 prm 文件来解决此问题jdbc/扩展/qt/jdbc.prm。但是 SAP 表示,他们不会支持这种解决方法,所以我们从上面提到的 SAP 本身获得了修复。


推荐阅读