SQL Views in SAP HANA

Spezielle Features von SAP HANA SQL-Views

Jörg Brandeis

(C) Brandeis Consulting.

Agenda

  • Assoziationen - JOINs auf Vorrat
(C) Brandeis Consulting.

Assoziationen

Analog den Assoziationen im CDS ABAP oder CDS im XSA:

  • Eine Assoziation definiert einen JOIN, der nur bei Bedarf ausgeführt wird.
  • Der View projeziert die gejointe Tabellen nicht standardmässig, d.h. sie ist bei einem SELECT *nicht mit dabei.
  • In einer Abfrage kann aber über Pfadausdrücke auf die Daten zugegriffen werden
(C) Brandeis Consulting.

Assoziationen - Beispiel

create or replace view v_projects as
(select * from demo_content.projects)
with associations
     ( many to one join demo_content.users as _ProjectManager on project_manager = _ProjectManager.id );

create or replace view v_tasks as 
( select * from demo_content.tasks)
with associations 
     ( many to one join demo_content.users as _Assignee on assignee = _Assignee.id,
       many to one join v_projects as _Project on project = _Project.id );



select * from v_tasks;


select id, 
       _Assignee.firstname, 
       _Assignee.lastname,
       _Project.title,
       _Project._ProjectManager.firstname
      from v_tasks 
      ;
(C) Brandeis Consulting.

Pfadausdrücke

Um Daten aus den assoziierten Tabellen bzw. Views abzufragen, verwenden wir Pfadausdrücke:

  • Die Assoziierten Tabellen werden per LEFT OUTER JOIN hinzugefügt.
  • Bei TO MANY Kardinalitäten kann sich die Mächtigkeit der Ergebnismenge ändern.
  • Es kann in Pfadausdrücken gefiltert werden. In Eckigen Klammern nach dem Assoziationsreferenz kann ein Prädikat geprüft werden.
  • Es kann über mehrere Ebenen Navigiert werden. Hier beispielsweise:
    V_TASKS._Project._ProjectManager

Beispiele

select id, 
       _Assignee[sex = 'M'].firstname, 
       _Assignee[ sex in ('M', 'A') ].lastname,
       _Project.title,
       _Project[ status IN (SELECT id
                              FROM demo_content.status
                             WHERE is_final = true) ]._ProjectManager.firstname
      from v_tasks as t
      order by id      ;
(C) Brandeis Consulting.