Ansicht
Dokumentation

ABENDDICDDL_DEFINE_JOIN_DRUL - DDICDDL DEFINE JOIN DRUL

ABENDDICDDL_DEFINE_JOIN_DRUL - DDICDDL DEFINE JOIN DRUL

PERFORM Short Reference   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- DEFINE JOIN DEPENDENCY RULE

DEFINE JOIN DEPENDENCY RULE drul
  ON dbtab1, dbtab2
    IF { cond_pattern }
      THEN { derived_cond }


Wirkung

Variante der Anweisung DEFINE DEPENDENCY RULE der Dictionary DDL zur Definition einer Join- Abhängigkeitsregel. Eine Join-Abhängigkeitsregel kann für genau zwei Datenbanktabellen dbtab1 und dbtab2 definiert werden, die über ein Komma getrennt anzugeben sind. Sie leitet aus dem Muster cond_pattern eine zusätzliche Join-Bedingung derived_cond ab. Der Optimizer der SAP-HANA-Datenbank sucht bei einem Lesezugriff, bei dem die beiden DDIC-Datenbanktabellen über einen Join-Ausdruck verknüpft sind, das Muster in dessen ON-Bedingung und fügt gegebenenfalls die zusätzliche Join-Bedingung mit AND an diese hinzu. Weiterhin werden zusätzliche Bedingungen, die durch eventuelle Filter-Abhängigkeitsregel für die beiden Datenbanktabellen definiert sind, auch für die jeweils andere DDIC-Datenbanktabelle übernommen, falls sie die in der Join-Bedingung genannten Spalten betreffen.

cond_pattern

Für cond_pattern kann in den geschweiften Klammern hinter IF wie folgt ein Muster eines relationalen Ausdrucks angegeben werden:

lhs = rhs $[AND lhs = rhs ...$]

Es sind über AND verknüpfte Vergleiche mit dem Operator = möglich. Verknüpfungen mit OR oder Negierungen mit NOT sind nicht möglich.

  • Als linke Seite lhs des Vergleichs kann angegeben werden:
  • dbtab1.column oder dbtab2.column für eine Spalte column der DDIC-Datenbanktabellen dbtab1 oder dbtab2.

  • Als rechte Seite rhs des Vergleichs kann angegeben werden:
  • dbtab1.column oder dbtab2.column für eine Spalte column der DDIC-Datenbanktabellen dbtab1 oder dbtab2.

  • Ein nummerierter Platzhalter $1, $2, ...

derived_cond

Für derived_cond kann in den geschweiften Klammern hinter THEN wie folgt eine Vorlage eines relationalen Ausdrucks angegeben werden:

lhs =$|$|>$|=$|>= rhs $[OR lhs =$|$|>$|<=$|>= rhs ...$]

Klammerungen einzelner Vergleiche mit runden Klammern ( ) sind möglich. Negierungen mit NOT sind nicht möglich.

  • Als linke Seite lhs eines Vergleichs kann angegeben werden:
  • dbtab1.column oder dbtab2.column für eine Spalte column der Datenbanktabellen dbtab2.column oder dbtab2.column.

  • Als rechte Seite rhs eines Vergleichs kann angegeben werden:
  • dbtab1.column oder dbtab2.column für eine Spalte column der Datenbanktabellen dbtab2.column oder dbtab2.column.

  • Ein nummerierter Platzhalter $1, $2, ..., der auch in cond_pattern angegeben sein muss. Beim Hinzufügen der Bedingung wird hier der Operand der gefundenen Bedingung eingesetzt, für den der gleiche Platzhalter im Muster cond_pattern steht.

Hinweise

  • Es ist nicht garantiert, dass der Optimizer der SAP-HANA-Datenbank das gesuchte Muster cond_pattern findet. Deshalb darf die zusätzliche Bedingung derived_cond die Ergebnismenge der ursprünglichen Query nicht beeinflussen. Das ist zwar technisch möglich, kann aber zu undefiniertem Verhalten führen, wenn der Optimizer der SAP-HANA-Datenbank das gesuchte Muster cond_pattern bei einem Teil der Zugriffe findet und bei anderen nicht.
  • Die zusätzliche Bedingung kann für eine Query im Werkzeug SQL-Trace (Transaktion ST05) über die Funktion Ausführungsplan anzeigen beobachtet werden.

Beispiel

Es seien folgende Abhängigkeitsregeln definiert:

DEFINE FILTER DEPENDENCY RULE demo_drul_3
  ON demo_parts_3
    IF { demo_parts_3.value >= 30 }
      THEN { demo_parts_3.area >= 3 }
DEFINE FILTER DEPENDENCY RULE demo_drul_4
  ON demo_parts_3
    IF { demo_parts_3.value  40 }
      THEN { demo_parts_3.area  4 }
DEFINE JOIN DEPENDENCY RULE demo_drul_5
  ON demo_parts_3, demo_parts_4
    IF { demo_parts_3.client = demo_parts_4.client AND
         demo_parts_3.id     = demo_parts_4.id     AND
         demo_parts_3.value  = demo_parts_4.value }
      THEN { demo_parts_3.area  = demo_parts_4.area }

Im Programm DEMO_DEPENDENCY_RULE_3 wird mit folgender SELECT-Anweisung auf DEMO_PARTS_3 und DEMO_PARTS_4 zugegriffen:

SELECT demo_parts_3~id, demo_parts_3~value, demo_parts_4~text
       FROM demo_parts_3
         INNER JOIN demo_parts_4
           ON demo_parts_3~id    = demo_parts_4~id AND
              demo_parts_3~value = demo_parts_4~value
       WHERE demo_parts_3~value >= 30 AND
             demo_parts_3~value   40
       ORDER BY demo_parts_3~id
       INTO TABLE @DATA(result).

Der Optimizer der SAP-HANA-Datenbank ergänzt die ON-Bedingung implizit um:

AND demo_parts_3~area = demo_parts_4~area

Weiterhin fügt er implizit folgende zusätzliche Filterbedingungen an die WHERE-Bedingung an:

AND demo_parts_3~area >= 3
AND demo_parts_3~area   4
AND demo_parts_4~area >= 3
AND demo_parts_4~area   4

Wenn die Daten der DDIC-Datenbanktabellen entsprechend aufgebaut sind, haben die Abhängigkeitsregeln keinen Einfluss auf die Ergebnismenge.






BAL_S_LOG - Application Log: Log header data   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 11958 Date: 20240523 Time: 155949     sap01-206 ( 114 ms )