Ansicht
Dokumentation

ABENHANA_DATA_AGING_DRULS - HANA DATA AGING DRULS

ABENHANA_DATA_AGING_DRULS - HANA DATA AGING DRULS

Fill RESBD Structure from EBP Component Structure   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Abhängigkeitsregeln für die Optimierung des Zugriffs auf veraltete Daten

Abhängigkeitsregeln sind im ABAP Dictionary definierbare Objekte einer SAP-HANA-Datenbank, die Beziehungen zwischen semantischen und technischen Spalten einer Datenbanktabelle herstellen können, aus denen der Optimizer bei einem Lesezugriff erweiterte Selektionsbedingungen erzeugen kann.

Für Datenbanktabellen, bei denen die Datenalterung über eine Temperaturspalte aktiv ist, können Abhängigkeitsregeln für die Optimierung des Zugriffs auf veraltete Daten eingesetzt werden. In diesem Fall verknüpft eine Abhängigkeitsregel die Temperaturspalte einer Datenbanktabelle mit normalen Datumsspalten der Tabelle.

Grundlage der Optimierung

Bei Tabellen mit einer Temperaturspalte befinden sich nur die aktuellen Daten im Hauptspeicher der SAP-HANA-Datenbank, während die veralteten Daten in anderen Partitionen abgelegt sind. Die Datenbankschnittstelle des AS ABAP greift standardmäßig nur auf die aktuellen Daten zu. Der Zusammenhang zwischen den tatsächlichen Daten und den Partitionsgrenzen wird in sogenannten Datenalterungsläufen hergestellt und ist für die Anwendungsprogrammierung transparent. Wenn auch auf veraltete Daten zugegriffen werden soll, müssen deshalb zuerst die Daten aller Partitionen in den Hauptspeicher der SAP-HANA-Datenbank geladen werden, was sich ungünstig auf die Performance auswirkt. Ein Zugriff auf veraltete Daten ist wie folgt möglich:

  • Ausschalten der Berücksichtigung der Datenalterung in der Datenbankschnittstelle mit dem Profilparameter abap/data_aging.
  • Umgehung der Berücksichtigung der Datenalterung beim -Zugriff auf CDS-Views und CDS-Tabellenfunktionen mit der Annotation @DataAging.noAgingRestriction:true.

Mit einer Abhängigkeitsregel kann ein solcher Zugriff um eine Selektionsbedingung für die Temperaturspalte erweitert werden, welche die Temperaturen auf solche einschränkt, die in den gleichen Zeilen wie die tatsächlich angeforderten Daten liegen. Dadurch muss die SAP-HANA-Datenbank nur die Partitionen in ihren Hauptspeicher laden, in denen sich die benötigten Daten befinden.

Dabei ist zu beachten, dass es nicht garantiert ist, dass der Optimizer der SAP-HANA-Datenbank die zusätzliche Selektionsbedingung für die Temperaturspalte erzeugt. Deshalb darf diese die Ergebnismenge der ursprünglichen Query nicht beeinflussen. Das ist zwar technisch möglich, kann aber zu undefiniertem Verhalten führen, wenn der Optimierer der SAP-HANA-Datenbank sich je nach Formulierung einer Query unterschiedlich verhält.

Die folgenden Abschnitte zeigen, wie Abhängigkeitsregeln zur Optimierung des Zugriffs auf veraltete Daten definiert werden können.

Filter-Abhängigkeitsregeln für die Datenalterung

Die Temperaturspalte hat folgende für Filter-Abhängigkeitsregeln wichtige Eigenschaften:

  • Die Temperaturspalte hat den Datentyp DATS.
  • Für aktuelle Daten enthält die Temperaturspalte den Initialwert 00000000.
  • Für veraltete Daten enthält die Temperaturspalte einen beim Datenalterungslauf erstellten Datumswert.

Es können also wie folgt Filter-Abhängigkeitsregeln definiert werden:

  • Für den Zugriff auf veraltete Daten können Filter-Abhängigkeitsregeln zusätzliche Selektionsbedingungen ableiten, in denen es Vergleiche für die Temperaturspalte gibt, welche diese auf die gleichen Zeilen einschränken, wie die Selektionsbedingungen für die zugehörigen Datumswerte.
  • Wenn zusammen mit veralteten Daten auch die aktuellen Daten benötigt werden, müssen Filter-Abhängigkeitsregeln so gestaltet werden, dass die zusätzliche Selektionsbedingung die Temperaturspalte auf die gewünschten Datumswerte einschränkt, ohne die aktuellen Daten auszugrenzen. Die zusätzliche Selektionsbedingung muss dann einen mit OR verknüpften relationalen Ausdruck dbtab._dataaging = '00000000' enthalten.

Hinweis

Wie Filter-Abhängigkeitsregeln zur Optimierung des Zugriffs auf veraltete Daten tatsächlich aussehen, hängt vom Aufbau der Datenbanktabellen und den beim Datenalterungslauf befolgten Regeln ab.

Beispiel

In folgender CDS-View ist die Berücksichtigung der Datenalterung für die Datenbanktabelle DAAG_SFLIGHT mit der Annotation @DataAging.noAgingRestriction:true abgeschaltet.

Ein -Zugriff auf diese View liest nicht nur aktuelle, sondern auch veraltete Daten:

Damit nicht alle Partitionen geladen werden müssen, kann wie folgt eine Filter-Abhängigkeitsregel definiert werden, wobei davon ausgegangen wird, dass die Temperaturspalte _DATAAGING für veraltete Daten einfach den gleichen Wert wie die Spalte FLDATE hat:

DEFINE FILTER DEPENDENCY RULE demo_daag_sflight_rule
  ON daag_sflight
    IF { daag_sflight.fldate >= $1 }
      THEN { daag_sflight._dataaging >= $1 OR
             daag_sflight._dataaging =  '00000000' }

Der Optimierer der SAP-HANA-Datenbank fügt dann implizit folgende zusätzliche Selektionsbedingung zur WHERE-Bedingung der gezeigten SELECT-Anweisung hinzu:

AND daag_sflight~_dataaging >= '20160101'
    OR  daag_sflight~_dataaging =  '00000000'

Die Ergebnismenge der Query wird dadurch nicht beeinflusst.

Join-Abhängigkeitsregeln für die Datenalterung

Für mehrere Datenbanktabellen, die im relationalen Modell miteinander verbunden sind, muss die Datenalterung gemeinsam berücksichtigt werden. In aller Regel werden die Zeilen verschiedener Datenbanktabellen, die zum gleichen Datum gehören, durch Join-Ausdrücke miteinander verknüpft. Das können Joins in , Native SQL oder in Views sein.

Um den Zugriff auf veraltete Daten solcherart verknüpfter Datenbanktabellen zu optimieren, können für diese entsprechende Join-Abhängigkeitsregeln definiert werden. Wie bei Filter-Abhängigkeitsregeln setzt dies das Wissen voraus, wie die Datenalterung tatsächlich bewerkstelligt wird und in welcher Beziehung die Tabellen zueinander stehen.

Beispiel

In folgender CDS-View ist die Berücksichtigung der Datenalterung für die Datenbanktabellen DAAG_SFLIGHT und DAAG_SBOOK mit der Annotation @DataAging.noAgingRestriction:true abgeschaltet.

@AbapCatalog.sqlViewName: 'DEMOCDSDAAGSFLBK'
@DataAging.noAgingRestriction:true
DEFINE VIEW demo_cds_daag_sflight_sbook AS
  SELECT FROM daag_sflight
     INNER JOIN daag_sbook
       ON daag_sflight.carrid = daag_sbook.carrid AND
          daag_sflight.connid = daag_sbook.connid AND
          daag_sflight.fldate = daag_sbook.fldate
           { daag_sflight.carrid,
             daag_sflight.connid,
             daag_sflight.fldate,
             daag_sbook.bookid,
             daag_sbook.customid };

Ein -Zugriff auf diese View liest nicht nur aktuelle, sondern auch veraltete Daten:

SELECT *
       FROM demo_cds_daag_sflight_sbook
       WHERE fldate >= '20160101'
       INTO TABLE @DATA(result).

Damit nicht alle Partitionen geladen werden müssen, kann zusätzlich zur Filter-Abhängigkeitsregel des vorhergehenden Beispiels wie folgt eine Join-Abhängigkeitsregel definiert werden, wobei davon ausgegangen wird, dass die Temperaturspalte _DATAAGING für veraltete Daten in beiden Tabellen einfach den gleichen Wert wie die Spalte FLDATE hat:

DEFINE JOIN DEPENDENCY RULE demo_daag_sflight_sbook_rule
  ON daag_sflight, daag_sbook
    IF { daag_sflight.mandt  = daag_sbook.mandt  AND
         daag_sflight.carrid = daag_sbook.carrid AND
         daag_sflight.connid = daag_sbook.connid AND
         daag_sflight.fldate = daag_sbook.fldate }
      THEN { daag_sflight._dataaging = daag_sbook._dataaging }

Der Optimierer der SAP-HANA-Datenbank fügt dann implizit folgende zusätzliche Selektionsbedingung zur ON-Bedingung der Join-Ausdrucks der CDS-View hinzu:

AND daag_sflight._dataaging = daag_sbook._dataaging

Weiterhin werden aus der Filterbedingung folgende zusätzliche Selektionsbedingungen zur WHERE-Bedingung der gezeigten SELECT-Anweisung hinzugefügt:

AND daag_sflight~_dataaging >= '20160101'
AND daag_sbook~_dataaging >= '20160101'
OR  daag_sflight~_dataaging = '00000000'
OR  daag_sbook~_dataaging =  '00000000'

Die Ergebnismenge der Query wird dadurch nicht beeinflusst.






CPI1466 during Backup   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12588 Date: 20240523 Time: 152343     sap01-206 ( 162 ms )