[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Nov 2004
    Beiträge
    4

    Query mit Eingangsfolge

    Hallo Forum,
    wir haben folgendes Problem:

    Ein Query muss Sätze sequentiell (in Eingangsfolge) anzeigen. Bei Angabe einer Datenselektion zieht der QM
    aber eine passende log. Datei heran und sortiert die Ausgabe nach dem Key der log. Datei.
    Wie kann man trotzdem die sequentielle Reihenfolge erzwingen?
    Danke im voraus.
    FZ

  2. #2
    Registriert seit
    Mar 2003
    Beiträge
    80
    Das "normale" Query liest meiner Meinung nach standardmäßig in Eingangsfolge.
    Da muss man dezidiert eine Sortierung angeben.
    lg

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Habt ihr ein QM-Query in SQL? Dann könnt ihr ORDER BY RRN(Datei) angeben. Hier gibt's ein paar Beispiele dazu.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    Der Query-Optimizer kann das leider nicht.
    Lösung:
    a) Kopieren der Daten vorher in eine neue Datei ohne Schlüssel (was ja nach Größe nicht sinnvoll ist)
    b) Einen QM-Query mit
    Create NewTable as
    Select rrn(*), Table.*
    from Table
    Where ....
    Diese neue Tabelle dann mit Query auswerten.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Zitat Zitat von Fuerchau
    a) Kopieren der Daten vorher in eine neue Datei ohne Schlüssel (was ja nach Größe nicht sinnvoll ist)
    b) Einen QM-Query mit
    Create NewTable as
    Select rrn(*), Table.*
    from Table
    Where ....
    Diese neue Tabelle dann mit Query auswerten.
    Eine neue Tabelle bzw. physiche Datei ist nicht erforderlich!
    Eine permanente SQL-View, die anstatt der physischen Daten/Tabelle im Query/400 verwendet wird, ist ausreichend.

    PHP-Code:
    Create View MySchema/MyView 
          
    as (Select rrn(a) as RelSatzNra.* from MyTable a
    Im Query/400 wird dann lediglich über die neue Spalte RelSatzNr sortiert.
    Was allerdings zu berückisichtigen ist: Wenn mit SQL oder Query nach der relativen Satz-Nr. sortiert oder über die relative Satz-Nr. selektiert wird, erfolgt immer ein Table Scan, d.h. die komplette Datei wird gelesen.

    @Alfredo
    Auch bei der Verarbeitung von Query/400 werden Zugriffswege verwendet und nicht standardmäßig nach Eingangsfolge gelesen.

    Die Angabe einer Sortierung ist bei allen SQL- oder auch Query/400-Abfragen notwendig, wenn die Datensätze in einer bestimmten Reihenfolge ausgegeben werden sollen. Das bedeutet jedoch nicht, dass nach Eingangsfolge gelesen werden muss. Vielmehr ist es so, dass mit Hilfe eines Zugriffsweges (SQL-Index oder geschlüsselte logische Datei) die benötigten Datensätze selektiert und in ein temporäres Objekt ausgegeben werden. In einem weiteren Schritt werden dann die in dem temporären Objekt gespeicherten Daten in der gewünschten Reihenfolge sortiert.
    (Deshalb sollte man auch den Order By nicht angeben, wenn er nicht unbedingt erforderlich ist.)

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Mar 2003
    Beiträge
    80
    Was heisst unbedingt notwendig?
    Wenn ich eine Abfrage sortiert bzw gruppiert nach dem Key machen will, muss ich sortieren angeben, weil eben QUERY/400 sonst nach Eingangsfolge liest, auch wenn man den Key als Gruppenfeld angibt.
    lg

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Zitat Zitat von alfredo
    weil eben QUERY/400 sonst nach Eingangsfolge liest
    Tut es eben nicht!
    Auch beim Query/400 wird der Query Optimizer (wenn auch nur alte Query Engine) aktiviert, der einen optimalen Zugriffsweg ermittelt und diesen verwendet. Die Verarbeitung nach Eingangsfolge (sprich Table Scan) erfolgt nur dann, wenn der Optimizer KEINEN optimalen Zugriffsweg findet!

    Nach Deinem Verständnist würde also bei jeder Abfrage, bei der keine Sortierung angegeben wurde die komplette Datei durchgelesen werden, das braucht bei in paar Milliönchen Sätzen schon seine Zeit. Zugegebenermaßen kann der Optimizer bei der CQE z.T. durch die Angabe einer Sortierung beeinflusst werden, aber es gibt dafür keine Garantie.

    Beispiel: Aus einer Auftrags-Kopf-Datei werden alle Aufträge für Kunde 4711 ausgewählt, aber nach Bestell-Nr. sortiert. Es sind sowohl Zugriffswege über die Kunden-Nr. als auch die Bestell-Nr. vorhanden. Obwohl die Sortierung nach Bestell-Nr. angegeben wurde, wird wahrscheinlich der Zugriffsweg über die Kunden-Nr. verwendet, alle Sätze ausgelesen und zum Schluss sortiert.

    Wenn Du's nicht glaubst, starte einen Database Monitor und analysiere die Ergebnisse. Da wirst Du sehen, dass auch bei Query/400-Abfragen Zugriffswege verwendet werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Mar 2003
    Beiträge
    80
    In der Praxis werden die Anwender wohl lieber eine Auswertung aufsteigend nach dem Gruppierungsbegriff und nicht nach Erstellungszeitpunkt haben wollen.

  9. #9
    Registriert seit
    Mar 2003
    Beiträge
    80
    Beispiel Datei TESTQUERY, Key=KEY
    select key
    from testquery
    group by key
    KEY
    7
    6
    5
    4
    3
    2
    1
    select key, count(*)
    from testquery
    group by key
    KEY COUNT ( * )
    1 1
    2 1
    3 1
    4 1
    5 1
    6 1
    7 1

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    Du musst unterscheiden zwischen der Query-Gruppierung und einem Group-By !

    Beim Query muss eine Sortierung angegeben werden, wenn die Gruppierung sinnvolle Summen auswerfen soll.
    Da beim Query sowohl die Einzelsätze als auch die Gruppensummen ausgewiesen werden können (in mehreren Stufen), erfolgt eben erst die Sortierung (falls angegeben) und anschließend eine ganz normale Gruppenwechsel-Verarbeitung.
    Der Optimizer betrachtet beim Query im Wesentlichen die Satzauswahl und die Sortierung.
    Von der anschließenden Gruppierung weiß er nähmlich nichts.

    Bei SQL sieht das anders aus.
    Da hat man nur 2 Möglichkeiten:
    - nur Einzelsätze
    - nur Gruppierung über max. 1 Ebene
    Der Optimizer entscheidet hier jeweils über
    - where
    - Group
    - having
    - order
    Klausel, wobei die Sortierung nicht eindeutig ist wenn man order-by weglässt, egal ob group-by oder nicht.

    @Birgitta
    Das mit der View geht solange gut, solange man wenige Sätze hat.
    Da der Optimizer nun mal immer auf der PF aufsetzt, habe ich zwar für Query nun die Satznummer, aber bei einer Sortierung nach dieser erfolgt eben immer ein Table-Scan und zwar unabhängig von jedweder Verfügbarkeit von LF's (ich habe es mit einer 2,5Mio-Date bei V5R3 ausprobiert).
    Lasse ich die Sortierung weg, klappts auch mit den LF's.
    Ich denke, das liegt daran, dass die RRN eine Funktion und kein Feld ist. Bei Sortierung nach UDF's siehts genauso bescheiden aus.

    Wenn ich aber weiß, dass das Zwischenergebnis nur ein paar 1000 bis 10.000 Sätze sind, ist das über einen Insert/Select bzw. Create/Select um Faktoren schneller.

    @Frank
    Prüfe mal an deiner Tabelle, ob REUSEDLT(*YES) eingeschaltet ist. Dann ist deine Eingangsfolge nähmlich keine mehr und das Problem löst sich in Luft auf.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Mar 2003
    Beiträge
    80
    Gut wenn man soviel Zeit zum Philosophieren hat...

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    Das hat mit Philosophieren nichts zu tun.
    Wenn man die Unterschiede nicht kennt und verinnerlicht, wundert man sich halt über das Ergebnis .

    Oder fragt hier
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. QueryManager / Query ---> Aufruf mit Variablen
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 29-11-06, 18:07
  2. query outq
    By TARASIK in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 22-08-06, 09:52
  3. Query Manager -_-
    By Azubiiiiii in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 03-08-06, 09:44
  4. Query - Tagesdatum
    By dino in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 09-05-06, 07:45
  5. Query und Datum
    By Hubert Brethauer in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 05-05-06, 12:37

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •