You are on page 1of 26

Week 1: SAP HANA Query Processing

Unit 5: SQL Optimizer – Architectural Overview


SQL Optimizer – Architectural Overview
SAP HANA SQL Optimizer

Application SAP HANA Query Processor


SELECT
A.COL1,
ABAP B.COL2
FROM TABLE1 A
INNER JOIN TABLE2 B SQL Plan Check plan cache entry
ON A.COL3 = B.COL3;
JAVA Cache

SQL
Front End
Plan cache entry found

SQL Optimizer

Plan

Execution
Engines

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 2


SQL Optimizer – Architectural Overview
SAP HANA SQL optimization process

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache

SQL Front
End

SQL
Optimizer

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 3


SQL Optimizer – Architectural Overview
SAP HANA SQL optimization process

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache

SQL Front
End

SQL
Optimizer

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 4


SQL Optimizer – Architectural Overview
Rule-based optimization and cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
▪ Predefined, mathematically proven rules are
FROM TA BLE2 B

applied, which by their nature would simplify


LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache the plan and lower the costs


Rule-Based ▪ Size estimation and cost comparison are not
Optimization
SQL Front required
End ▪ Filter push-down, join removal, simplify group
by
SQL
Optimizer

▪ Cost-based optimization finds candidates from


Cost-Based
the plan generated in rule-based optimization
Query
Optimization ▪ Cost of every alternative is calculated and one
with the best cost is chosen

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 5


SQL Optimizer – Architectural Overview
Rule-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer

Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 6


SQL Optimizer – Architectural Overview
Rule-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer

Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 7


SQL Optimizer – Architectural Overview
Rule-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer

Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 8


SQL Optimizer – Architectural Overview
Rule-based optimization
J12

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
F J24
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache G T2 T4
Rule-Based
Optimization J13
SQL Front
End

G T3
SQL
Optimizer
T1

*Predefined rules are sequentially


Cost-Based
applied to the initial tree.
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 9


SQL Optimizer – Architectural Overview
Rule-based optimization
J12

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
J24
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache G T2 T4
Rule-Based
Optimization J13
SQL Front
End

G F Filter Pushdown
SQL
Optimizer
T1 T3

*Predefined rules are sequentially


Cost-Based
applied to the initial tree.
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 10


SQL Optimizer – Architectural Overview
Rule-based optimization
J12

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
J24
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache Simplify G T2 T4
Rule-Based Group By
Optimization J13
SQL Front
End

G F
SQL
Optimizer
T1 T3

*Predefined rules are sequentially


Cost-Based
applied to the initial tree.
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 11


SQL Optimizer – Architectural Overview
Rule-based optimization
J12
Remove
Unnecessary Join
SELECT /*lit eral*/ A .COL1, A .COL2
FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
J24
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache JG
13 T2 T4
Rule-Based
Optimization
SQL Front G F
End

SQL T1 T3
Optimizer

*Predefined rules are sequentially


Cost-Based
applied to the initial tree.
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 12


SQL Optimizer – Architectural Overview
Rule-based optimization
J12

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
T2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache JG
13

Rule-Based
Optimization
SQL G F
Frontend

SQL T1 T3
Optimizer
REWRITE TREE

Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 13


SQL Optimizer – Architectural Overview
Rule-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer

Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 14


SQL Optimizer – Architectural Overview
Cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer

Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 15


SQL Optimizer – Architectural Overview
Cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
*The tree from the rule-based
Optimizer
optimization is sent to cost-based
query optimization

Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 16


SQL Optimizer – Architectural Overview
Plan 1
Cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer
_THRU_
&
PRE_BEFORE_
Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 17


SQL Optimizer – Architectural Overview
Plan 1
Cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
Plan 2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer

_THRU_
&
PRE_BEFORE_
Cost-Based
Query
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 18


SQL Optimizer – Architectural Overview
Plan 1
Cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
Plan 2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front Plan 3
End

SQL
Optimizer

_THRU_
&
Cost-Based
Query PRE_BEFORE_
Optimization

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 19


SQL Optimizer – Architectural Overview
Plan 1
Cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
Plan 2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front Plan 3
End

SQL
Optimizer
Plan 4

_THRU_
Cost-Based
Query &
Optimization PRE_BEFORE_

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 20


SQL Optimizer – Architectural Overview
Plan 1
Cost-based optimization

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
Plan 2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front Plan 3
End

SQL
Optimizer
Plan 4

Cost-Based
Query _THRU_ Plan 5
Optimization
&
PRE_BEFORE_

© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 21


SQL Optimizer – Architectural Overview
Plan 1
Enumerators

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
Plan 2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
A_THRU_B PREA_BEFORE_B
Optimization
SQL Plan 3
Frontend

SQL
Optimizer
Plan 4

▪ AGGR_THRU_JOIN ▪ PREAGGR_BEFORE_JOIN
▪ JOIN_THRU_JOIN ▪ PREAGGR_BEFORE_UNION
Cost-Based
▪ JOIN_THRU_AGGR …
Query Plan 5
Optimization _THRU_
&
PRE_BEFORE_
Plan 6
© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 22
SQL Optimizer – Architectural Overview
Plan 1
Final plan selection among alternatives

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
Plan 2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front Plan 3
End

SQL
Optimizer
Plan 4

Cost-Based
Query Plan 5
Optimization

Plan 6
© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 23
SQL Optimizer – Architectural Overview
Plan 1
Final plan selection among alternatives

SELECT /*lit eral*/ A .COL1, A .COL2


FROM TABLE1 A
INNER JOIN ( SELECT B.COL1, B.COL2
FROM TA BLE2 B
Plan 2
LEFT OU TER JOIN (SELECT E.COL1, E.COL2, G.COL2

SQL Plan
FROM TABLE3 E
INNE R JOIN ( SELECT F .COL1, F .COL2
FROM TAB LE4 F
GROUP BY F.COL1, F.COL2) G
ON E .COL2=G. COL2) H
ON B.CO L1 =H.CO L1) D ON A.COL2 = D.COL2
WHERE A.COL3 =20 WIT H HINT ( NO_USE_H EX_PLAN) ;

Cache
Rule-Based
Optimization
SQL Front
End

SQL
Optimizer
Plan 4

Cost-Based
Query Plan 5
Optimization

Plan 3 Plan 6
© 2020 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 24
Thank you.
Contact information:

open@sap.com
Follow all of SAP

www.sap.com/contactsap

© 2020 SAP SE or an SAP affiliate company. All rights reserved.


No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of
SAP SE or an SAP affiliate company.
The information contained herein may be changed without prior notice. Some software products marketed by SAP SE and its
distributors contain proprietary software components of other software vendors. National product specifications may vary.
These materials are provided by SAP SE or an SAP affiliate company for informational purposes only, without representation or
warranty of any kind, and SAP or its affiliated companies shall not be liable for errors or omissions with respect to the materials.
The only warranties for SAP or SAP affiliate company products and services are those that are set forth in the express warranty
statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional
warranty.
In particular, SAP SE or its affiliated companies have no obligation to pursue any course of business outlined in this document or
any related presentation, or to develop or release any functionality mentioned therein. This document, or any related presentation,
and SAP SE’s or its affiliated companies’ strategy and possible future developments, products, and/or platforms, directions, and
functionality are all subject to change and may be changed by SAP SE or its affiliated companies at any time for any reason
without notice. The information in this document is not a commitment, promise, or legal obligation to deliver any material, code, or
functionality. All forward-looking statements are subject to various risks and uncertainties that could cause actual results to differ
materially from expectations. Readers are cautioned not to place undue reliance on these forward-looking statements, and they
should not be relied upon in making purchasing decisions.
SAP and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered
trademarks of SAP SE (or an SAP affiliate company) in Germany and other countries. All other product and service names
mentioned are the trademarks of their respective companies.
See www.sap.com/copyright for additional trademark information and notices.

You might also like