Willkommen Gast! Um alle Funktionen zu aktivieren müssen Sie sich Anmelden oder Registrieren.

Mitteilung

Icon
Error

Optionen
Gehe zum aktuellsten Beitrag Gehe zum letzten Ungelesenen
Offline MartinZn  
#1 Geschrieben : Montag, 24. September 2018 09:00:30(UTC)
MartinZn

Beiträge: 15
Germany
Wohnort: Dresden
Hallo zusammen,

ich möchte einen export der Belege und Positionen über Jahre hinweg (>1Mio Datensätze) machen und zwar strukturiert
Belegkopf + X Belege
Belegkopf + Y Belege
...

Dazu habe ich mir einen Struktur angelegt, welche die BKPF enthält und eine Tabelle von BSID bzw BSAD. So weit so gut.

Nun zur Selektion und dem Zusammenführen.

Was würdet ihr empfehlen?
A) Die Views BKPF_BSID und BKPF_BSAD und das ganze dann strukturieren?
B) BKPF ziehen und dann die Positionen in einzelnen Selects?
C) BKPF ziehen und BSID/BSAD ziehen und dann peer BKPF-Loop mit innerem BSID/BSAD-Loop zusammenführen?
D) BKPF ziehen und BSID/BSAD ziehen und sortieren und frech read table mit binary search, die Zeile löschen und die nächste mit binary search usw.
E) ganz was anderes machen?

Ich mache aktuell C) aber das zusammenführen dauert erschreckend lange, daher bin ich auf die "grandiose" Idee mit D) gekommen.

Vielen Dank
Martin

Nehmen Sie an dieser Diskussion teil! SAP FORUM - SAP Community LoginHier registrieren.

Offline wreichelt  
#2 Geschrieben : Montag, 24. September 2018 09:14:57(UTC)
wreichelt

Beiträge: 1,639
Hallo Martin,

warum BSID und BSAD ? BSID enthält doch alle Debitorenbelege, sowohl ausgeglichen und auch offen.

Warum alle Belege ziehen ? wohin geht die Reise mit den Daten ?

Gruß Wolfgang
Offline MartinZn  
#3 Geschrieben : Montag, 24. September 2018 09:32:22(UTC)
MartinZn

Beiträge: 15
Germany
Wohnort: Dresden
Hallo Wolfgang,

BSID enthält auch die ausgeglichenen?

Ich erzeuge aus den Daten eine XML für ein anderes Tool als Initialexport und dann nur noch die täglichen, was dann wiederum kein Problem ist.

Viele Grüße
Martin

Bearbeitet vom Benutzer Montag, 24. September 2018 09:33:38(UTC)  | Grund: Nicht angegeben

Offline wreichelt  
#4 Geschrieben : Montag, 24. September 2018 09:54:58(UTC)
wreichelt

Beiträge: 1,639
Hallo Martin,

BSAD enthält alle Debitorenpodten. BSID war ein Fehler.


Offene debitorische Posten stehen in der Tabelle BSID. Wenn ein Beleg ausgeziffert wird, z.B. durch Buchung einer entsprechenden Zahlung oder einer sonstigen Ausgleichsbuchung, wandert der Posten von der Tabelle BSID in die BSAD und erhält eine Ausgleichsbelegnummer (Feld BSAD-AUGBL) sowie ein Ausgleichsdatum (BSAD-AUGDT).

Gruß Wolfgang
Offline LaMancha  
#5 Geschrieben : Montag, 24. September 2018 10:12:30(UTC)
LaMancha

Beiträge: 15
Germany
Wohnort: Regensburg
Hallo Martin,

wie Wolfgang schon unter #2 schrieb, kommt es auch darauf an, "wohin geht die Reise mit den Daten" (also ob diese beispielsweise "BKPF-weise" in eine sequentielle Datei geschrieben oder in eine Datenbanktabelle kopiert werden sollen).

Das Lesen selbst mit Variante C) ist schon ok, aber ich würde zur Beschleunigung mal als Alternative zum inneren Loop einen Array-Fetch probieren (select ... into table ...).

Freundliche Grüße - LaMancha
Offline MartinZn  
#6 Geschrieben : Montag, 24. September 2018 10:58:44(UTC)
MartinZn

Beiträge: 15
Germany
Wohnort: Dresden
Hallo LaMancha,
hallo Wolfgang,

danke an euch beide.

die Positions-Selects (wenn ich dich richtig verstehe) für die X-tausend Belegköpfe wollte ich mir eigentlich verkneifen. Lieber zwei "ordentliche" Selects und das ganze dann effizient im Code, wobei das mit dem effizient grad nicht so klappte.

Lösung C) bedeutet eben X-tausend loops mal X-tausend loops.

Aber ich hab vorhin nochmal mit nem Kollegen geredet und er meinte ich könnte auch über die Positionen loopen und per read table ... binary search den Kopf und dann die Position an den Kopf dranhängen. Die Köpfe sind ja eindeutig, daher passt das.
Ich wollte es mit Lösung D) anders herum machen und die benutzten positionen wegimprovisieren, was natürlich nicht unbedingt beste Programmierung ist.

VG
Martin

Bearbeitet vom Benutzer Montag, 24. September 2018 11:02:37(UTC)  | Grund: Nicht angegeben

Offline LaMancha  
#7 Geschrieben : Montag, 24. September 2018 11:13:26(UTC)
LaMancha

Beiträge: 15
Germany
Wohnort: Regensburg
Hallo Martin,

mein Vorschlag war, anstelle des inneren Loops einen Array-Fetch zu probieren. Dann würden eben nur X-tausend loops mal 1 Array-Fetch den Lesevorgang insgesamt wahrscheinlich beschleunigen.

Freundliche Grüße - LaMancha
Offline wreichelt  
#8 Geschrieben : Montag, 24. September 2018 11:15:33(UTC)
wreichelt

Beiträge: 1,639
Hallo Martin,

warum nicht die BSID und BSAD in eine Tabelle, darüber dann den LOOP und den Belegkopf mittels SELECT SINGLE dazu lesen?
Damit würde der verschachtelte Loop entfallen.

Gruß Wolfgang
Offline MartinZn  
#9 Geschrieben : Dienstag, 25. September 2018 20:54:22(UTC)
MartinZn

Beiträge: 15
Germany
Wohnort: Dresden
Hallo,

das hatte ich verstanden, aber wissentlich x-tausend Einzel-Datenbankzugriffe vermeide ich im allgemeinen.

Der verschachtelte/innere loop entfällt jetzt sowieso, da ich BSID und BSAD wie du beschreibst bereits in eine Tabelle packe, aber eben statt der Datenbankzugriffe das read table... binary search zu verwenden plane.

Da die Datenmengen um das ordentlich einer Laufzeitanalyse zu unterziehen dummerweise erst auf dem Q-System zu finden sind, kann ich leider nur schwer testen, ob es schneller ist die BKPF zu lesen und dann read table oder die BKPF einzeln zu selektieren.
Ich persönlich würde auf das read table tippen muss ich gestehen.

VG
Martin
Offline LaMancha  
#10 Geschrieben : Mittwoch, 26. September 2018 11:06:47(UTC)
LaMancha

Beiträge: 15
Germany
Wohnort: Regensburg
Es ging nicht um "read table" sondern um "select into table".
Offline MartinZn  
#11 Geschrieben : Mittwoch, 26. September 2018 14:01:42(UTC)
MartinZn

Beiträge: 15
Germany
Wohnort: Dresden
Hallo LaMancha,

ich bin nicht sicher, dass wir nicht aneinander vorbei reden.
Der Lesevorgang der Daten ist schnell. Ich habe eine Ladung Belegköpfe und eine Ladung Belegpositionen innerhalb von Sekunden. Ich hab also alles was ich benötige, nur noch nicht strukturiert.

Was eben lange dauert, ist aktuell das Anhängen der Belegpositionen an meine Belegköpfe mittels 2 Loops.

Auch wenn es von der Logik her einfacher sein mag, bin ich bezüglich der Laufzeit abgeneigt mehrere tausend Datenbankzugriffe durchzuführen, selbst wenn ich die Indizes nutze.
Aber wie gesagt, da bin will ich mich nicht 100%ig festlegen, dass das wirklich langsamer ist. Ist eher Bauchgefühl aus meinen bisherigen Erfahrungen.

Wie gesagt der Vorschlag meines Kollegen, die BSID/BSAD als Loop zu verwenden und dann die BKPF per read table...binary search ermitteln und die BSID/BSAD da dran zu hängen, war auch genau das was ich irgendwie im Kopf hatte, nur verkehrt herum.

Ich werde bei Gelegenheit mal beides ausprobieren und eine Laufzeitanalyse machen.
Offline LaMancha  
#12 Geschrieben : Mittwoch, 26. September 2018 14:25:48(UTC)
LaMancha

Beiträge: 15
Germany
Wohnort: Regensburg
Da haben wir leider aneinander vorbei geredet - sorry.

Wenn das Problem in der speicher-internen Verarbeitung (also nach dem Lesen aus der Datenbank) liegt: ist dann das Zusammenführen von Kopf- und Positionsdaten oder deren Schreiben in die weiterzuverarbeitenden Ziele das Zeitraubendere?

Viel Erfolg beim Ausprobieren - es sollte schon einen Weg geben, die Daten in angemessener Zeit in eine XML-Datei zu bringen (ca. 1 Mio. Datensätze sind für ein ausgewachsenes SAP-System eigentlich kein Problem).
Offline MartinZn  
#13 Geschrieben : Mittwoch, 26. September 2018 19:13:21(UTC)
MartinZn

Beiträge: 15
Germany
Wohnort: Dresden
Ja das war auch mein Stand, dass solche größenordnungen problemlos gehen sollten, daher war ich auch so überrascht, dass das so langsam war.

ja das zusammenführen ist langsam.

Danke, wird schon schief gehen ^^
Offline LaMancha  
#14 Geschrieben : Donnerstag, 27. September 2018 08:27:14(UTC)
LaMancha

Beiträge: 15
Germany
Wohnort: Regensburg
Wenn das Zusammenführen langsam ist, dann könnte man diese Funktionalität evtl. auch in die Datenbank vorverlegen und dort eine Datenbank-View benutzen (bzw. anlegen). Damit würde etliche Last auf dem Anwendungsserver entfallen und Zusammenführen+Lesen wären in Tateinheit vermutlich schneller. Hängt natürlich ab von der Ausstattung der einzelnen Komponenten (Datenbank vs. Anwendungssever) und deren Auslastung (z. B. viele konkurrierende Zugriffe aus Dialoganwendungen, Nutzung der Tabellenpuffer im Anwendungsserver, usw.).
Offline MartinZn  
#15 Geschrieben : Donnerstag, 27. September 2018 11:27:00(UTC)
MartinZn

Beiträge: 15
Germany
Wohnort: Dresden
Ich hab den Umbau auf Loop über BSID/BSAD und read table auf BKPF mit binary search gemacht.

Wo die beiden loops Minuten brauchen, ist das innerhalb von praktisch nix fertig.

Klappt also sehr gut.
Offline LaMancha  
#16 Geschrieben : Donnerstag, 27. September 2018 12:21:54(UTC)
LaMancha

Beiträge: 15
Germany
Wohnort: Regensburg
Das freut mich - Gratulation!
Benutzer, die gerade dieses Thema lesen
Das Forum wechseln  
Du kannst keine neue Themen in diesem Forum eröffnen.
Du kannst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge nicht löschen.
Du darfst deine Beiträge nicht editieren.
Du kannst keine Umfragen in diesem Forum erstellen.
Du kannst nicht an Umfragen teilnehmen.

- Impressum / Datenschutz -