Tuesday, November 8, 2016

Bewegliches Oracle 11g

Ich habe einen Tisch, Maße. Mit Spalten: Zeitstempel (Unix-Zeitstempel), Tag. Wert. Um einen einzigen gleitenden Durchschnitt von sagen, 15 Tage, kann ich etwas wie: Jetzt möchte ich den gleitenden Durchschnitt der 150 letzten Zeilen zu bekommen, aber Im nicht sicher, wie es abzufragen. Das ist offensichtlich falsch, aber ich habe darüber nachgedacht und kann es nicht herausfinden. Irgendwelche Ideen Mein Gedankengang ist, dass ich jeden Eintrag mit den 150 Einträgen unterhalb entsprechen müssen und berechnen Sie den Wert durchschnittlich für die 150 Einträge. Im auch ziemlich sicher, dass theres wahrscheinlich ein besserer Weg ohne ein CROSS JOIN. Denn das wäre sehr langsam. Ask Nov 19 12 at 9: 1821 SQL für Analyse und Reporting Um diese Operationen durchzuführen, fügen die analytischen Funktionen der SQL-Verarbeitung mehrere neue Elemente hinzu. Diese Elemente bauen auf vorhandenen SQL auf, um flexible und leistungsfähige Berechnungsausdrücke zu ermöglichen. Mit wenigen Ausnahmen haben die analytischen Funktionen diese neuen Elemente. Der Verarbeitungsablauf ist in Abbildung 21-1 dargestellt. Abbildung 21-1 Verarbeitungsauftrag Die wesentlichen Konzepte, die in analytischen Funktionen verwendet werden, sind: Die Abfrageverarbeitung mit Hilfe von analytischen Funktionen erfolgt in drei Stufen. Erstens, alle Joins, WHERE. GROUP BY und HAVING-Klauseln durchgeführt. Zweitens wird die Ergebnismenge den analytischen Funktionen zur Verfügung gestellt, und alle ihre Berechnungen erfolgen. Drittens, wenn die Abfrage eine ORDER BY-Klausel an ihrem Ende hat, wird die ORDER BY verarbeitet, um eine präzise Ausgabeordnung zu ermöglichen. Die Verarbeitungsreihenfolge ist in Abbildung 21-1 dargestellt. Ergebnismengenpartitionen Die analytischen Funktionen ermöglichen es Benutzern, Abfrageergebnismengen in Gruppen von Zeilen, die als Partitionen bezeichnet werden, zu teilen. Beachten Sie, dass der Begriff Partitionen, die mit analytischen Funktionen verwendet werden, nicht mit dem Tabellenpartitionsmerkmal verknüpft ist. In diesem Kapitel bezieht sich der Begriff Partitionen nur auf die Bedeutung der analytischen Funktionen. Partitionen werden nach den Gruppen definiert, die mit GROUP BY-Klauseln definiert sind, sodass sie für alle aggregierten Ergebnisse wie Summen und Durchschnittswerte verfügbar sind. Partitionsbereiche können auf beliebigen Spalten oder Ausdrücken basieren. Eine Abfrageergebnismenge kann in nur eine Partition partitioniert werden, die alle Zeilen, einige große Partitionen oder viele kleine Partitionen mit nur wenigen Zeilen enthält. Für jede Zeile in einer Partition können Sie ein Schiebefenster von Daten definieren. Dieses Fenster bestimmt den Bereich der Zeilen, die für die Berechnung der aktuellen Zeile verwendet werden. Fenstergrößen können entweder auf eine physikalische Anzahl von Zeilen oder ein logisches Intervall wie Zeit basieren. Das Fenster hat eine Anfangszeile und eine Endzeile. Je nach ihrer Definition kann sich das Fenster an einem oder beiden Enden bewegen. Beispielsweise würde ein Fenster, das für eine kumulative Summenfunktion definiert ist, seine Startzeile in der ersten Zeile seiner Partition festgelegt, und seine Endzeile würde vom Anfangspunkt bis zur letzten Zeile der Partition verschoben. Im Gegensatz dazu würde ein Fenster, das für einen gleitenden Durchschnitt definiert ist, sowohl seine Anfangs - als auch seine Endpunkte gleiten lassen, so daß sie einen konstanten physikalischen oder logischen Bereich beibehalten. Ein Fenster kann so groß sein wie alle Zeilen in einer Partition oder nur ein Schiebefenster einer Zeile innerhalb einer Partition. Wenn ein Fenster in der Nähe eines Rahmens ist, gibt die Funktion Ergebnisse nur für die verfügbaren Zeilen zurück, anstatt Sie zu warnen, dass die Ergebnisse nicht das sind, was Sie wollen. Bei der Verwendung von Fensterfunktionen ist die aktuelle Zeile während der Berechnungen enthalten, so dass Sie nur n (n) angeben sollten, wenn Sie mit n Elementen zu tun haben. Jede Berechnung, die mit einer analytischen Funktion durchgeführt wird, basiert auf einer aktuellen Zeile innerhalb einer Partition. Die aktuelle Zeile dient als Referenzpunkt, der den Anfang und das Ende des Fensters bestimmt. Beispielsweise könnte eine zentrierte gleitende Durchschnittsberechnung mit einem Fenster definiert werden, das die aktuelle Zeile, die sechs vorhergehenden Zeilen und die folgenden sechs Zeilen enthält. Dies würde ein Schiebefenster von 13 Reihen erzeugen (siehe Abbildung 21-2). Abbildung 21-2 Schiebefenster Beispiel Rangierfunktionen Eine Rangfolgefunktion berechnet den Rang eines Datensatzes im Vergleich zu anderen Datensätzen im Datensatz anhand der Werte eines Satzes von Maßnahmen. Die Typen der Ranking-Funktion sind: Sample Linear Regression Berechnung In diesem Beispiel berechnen wir eine Regressionsgerade, die die Menge eines Produktes als lineare Funktion des Produktlistenpreises ausdrückt. Die Berechnungen werden nach Vertriebskanal gruppiert. Die Werte SLOPE. INTCPT. RSQR sind Steigung, Intercept und Bestimmungskoeffizient der Regressionslinie. Der (ganzzahlige) Wert COUNT ist die Anzahl der Produkte in jedem Kanal, für den sowohl die verkauften Mengen als auch die Listenpreisdaten verfügbar sind. Lineare Algebra Lineare Algebra ist ein Zweig der Mathematik mit einer breiten Palette von praktischen Anwendungen. Viele Bereiche haben Aufgaben, die durch lineare Algebra ausgedrückt werden können, und hier einige Beispiele aus verschiedenen Bereichen: Statistik (multiple lineare Regression und prinzipielle Komponentenanalyse), Data Mining (Clustering und Klassifikation), Bioinformatik (Analyse von Microarray-Daten), Operations Research (Supply Chain und andere Optimierungsprobleme), Ökonometrie (Analyse der Verbraucherbedarfsdaten) und Finanzen (Asset Allocation). Verschiedene Bibliotheken für lineare Algebra sind frei verfügbar für jedermann zu verwenden. Oracles UTLNLA-Paket stellt Matrix-PL / SQL-Datentypen und Wrapper-PL / SQL-Unterprogramme für zwei der beliebtesten und robustesten dieser Bibliotheken BLAS und LAPACK zur Verfügung. Lineare Algebra hängt von der Matrixmanipulation ab. Die Durchführung von Matrixmanipulationen in PL / SQL in der Vergangenheit erforderte das Erfinden einer Matrixdarstellung basierend auf PL / SQLs nativen Datentypen und dann das Schreiben von Matrixmanipulationsroutinen von Grund auf neu. Dies erforderte einen erheblichen Programmieraufwand und die Leistung der resultierenden Implementierung war begrenzt. Wenn Entwickler wählten, Daten an externe Pakete zur Verarbeitung zu senden, anstatt ihre eigenen Routinen zu erstellen, könnte eine Datenübertragung hin und her zeitraubend sein. Mit dem UTLNLA-Paket können Daten in Oracle bleiben, der Programmieraufwand entfernt und eine schnelle Implementierung ermöglicht werden. Beispiel 21-19 Lineare Algebra Hier ist ein Beispiel dafür, wie Oracles lineare Algebra-Unterstützung für Business Analysis verwendet werden könnte. Es ruft eine multiple lineare Regressionsanwendung auf, die mit dem UTLNLA-Paket erstellt wurde. Die Multiregressionsanwendung wird in einem Objekt namens OLSRegression implementiert. Beachten Sie, dass Beispieldateien für das OLS-Regressionsobjekt in ORACLEHOME / plsql / demo gefunden werden können. Betrachten Sie das Szenario eines Einzelhändlers, der die Wirksamkeit seines Marketingprogramms analysiert. Jeder seiner Filialen verteilt sein Marketingbudget über folgende mögliche Programme: Medienwerbung (Medien), Promotions (promo), Rabattgutscheine (disct) und Direct Mailer (dmail). Die Regressionsanalyse bildet eine lineare Beziehung zwischen der Menge der Verkäufe, die ein durchschnittliches Geschäft in einem gegebenen Jahr (Verkäufe) und den Ausgaben für die vier Bestandteile des Marketing-Programms hat. Angenommen, die Marketingdaten werden in der folgenden Tabelle gespeichert: Dann können Sie das folgende lineare Verkaufsmodell mit Hilfe von Koeffizienten erstellen: Dieses Modell kann als die folgende Sicht implementiert werden, die sich auf das OLS-Regressionsobjekt bezieht: Mit dieser Ansicht ein Marketing Programm-Manager kann eine Analyse durchführen, wie Ist dieses Vertriebs-Marketing-Modell vernünftig für das Jahr 2004 Daten Das heißt, ist die Mehrfachkorrelation größer als einige akzeptable Wert, sagen, 0,9 Die SQL für eine solche Abfrage könnte wie folgt sein: Sie könnten auch Fragen wie z. B. Was ist der erwartete Umsatz Umsatz eines Filialen ohne Marketing-Programme im Jahr 2003 oder Welche Komponente des Marketing-Programm war die effektivste im Jahr 2004 Das heißt, ein Dollar-Anstieg in dem Programm produziert die größte erwartete Zunahme in Sales Weitere Informationen zur Verwendung des UTLNLA-Pakets und der linearen Algebra finden Sie unter Oracle Database PL / SQL-Pakete und Typenreferenzen. Häufige Itemsets Anstatt zu zählen, wie oft ein bestimmtes Ereignis auftritt (z. B. wie oft jemand Milch im Lebensmittelgeschäft gekauft hat), kann es nützlich sein, zu zählen, wie oft mehrere Ereignisse zusammen auftreten (z. B. wie oft jemand beide Milch gekauft hat) Und Getreide zusammen an der Supermarkt). Sie können diese mehrere Ereignisse mit einem so genannten "häufigen Itemset" zählen, das, wie der Name schon sagt, eine Menge von Elementen ist. Einige Beispiele für Postenets könnten alle Produkte sein, die ein bestimmter Kunde in einer einzigen Reise zum Lebensmittelgeschäft gekauft hat (üblicherweise als Marktkorb bezeichnet), die Webseiten, auf die ein Benutzer in einer einzigen Sitzung zugreift, oder die Finanzdienstleistungen, Kunde nutzt. Die praktische Motivation für die Verwendung eines häufigen Itemset ist es, diejenigen Itemsets zu finden, die am häufigsten auftreten. Wenn Sie analysieren, ein Lebensmittelgeschäfte Point-of-Sale-Daten, könnten Sie zum Beispiel entdecken, dass Milch und Bananen sind die am häufigsten gekauft Paar von Elementen. Häufige Postenets sind damit seit vielen Jahren in Business-Intelligence-Umgebungen verwendet worden, wobei die gebräuchlichste für die Marktkorb-Analyse im Einzelhandel ist. Häufige Itemset-Berechnungen werden mit der Datenbank integriert, die über relationale Tabellen verfügt und über SQL aufgerufen wird. Diese Integration bietet die folgenden wesentlichen Vorteile: Anwendungen, die bisher auf häufige Itemset-Operationen angewiesen waren, profitieren nun von einer deutlich verbesserten Performance sowie einer einfacheren Implementierung. SQL-basierte Anwendungen, die bisher keine häufigen Postenets verwendet haben, können nun leicht erweitert werden, um diese Funktionalität nutzen zu können. Häufige Itemsets-Analyse wird mit dem PL / SQL-Paket DBMSFREQUENTITEMSETS durchgeführt. Weitere Informationen finden Sie unter Oracle Database PL / SQL-Pakete und Typenreferenzen. Darüber hinaus gibt es ein Beispiel für häufige Postenets Verwendung in Häufigen Postenets. Weitere statistische Funktionen Oracle stellt eine Reihe statistischer SQL-Funktionen und ein Statistikpaket, DBMSSTATFUNCS, vor. In diesem Abschnitt werden einige der neuen Funktionen zusammen mit der grundlegenden Syntax aufgelistet. Beschreibende Statistik Sie können folgende deskriptive Statistik berechnen: Median eines Datensatzes Sie können folgende parametrische Statistik berechnen: Spearmans rho Koeffizient Kendalls tau-b Koeffizient Zusätzlich zu den Funktionen verfügt diese Version über ein neues PL / SQL-Paket DBMSSTATFUNCS. Es enthält die beschreibende statistische Funktion ZUSAMMENFASSUNG zusammen mit Funktionen zur Unterstützung der Verteilungsanpassung. Die SUMMARY-Funktion fasst eine numerische Spalte einer Tabelle mit einer Vielzahl von deskriptiven Statistiken zusammen. Die fünf Verteilungsanpassungsfunktionen unterstützen normale, einheitliche, Weibull-, Poisson - und Exponentialverteilungen. WIDTHBUCKET-Funktion Die WIDTHBUCKET-Funktion gibt für einen gegebenen Ausdruck die Bucket-Nummer zurück, nach der das Ergebnis dieses Ausdrucks zugewiesen wird. Sie können mit dieser Funktion Gleichheitshistogramme erzeugen. Equiwidth-Histogramme unterteilen Datensätze in Buckets, deren Intervallgröße (höchster Wert zum niedrigsten Wert) gleich ist. Die Anzahl der Zeilen, die von jedem Eimer gehalten werden, variiert. Eine verwandte Funktion, NTILE. Schafft gleich große Schaufeln. Equiwidth-Histogramme können nur für numerische, Datums - oder Datetime-Typen erzeugt werden. Die ersten drei Parameter sollten also alle numerischen Ausdrücke oder alle Datumsausdrücke sein. Andere Ausdrücke sind nicht zulässig. Wenn der erste Parameter NULL ist. Das Ergebnis ist NULL. Wenn der zweite oder dritte Parameter NULL ist. Wird eine Fehlermeldung zurückgegeben, da ein NULL-Wert keinen Endpunkt (oder einen beliebigen Punkt) für einen Bereich in einer Datums - oder numerischen Wertdimension angibt. Der letzte Parameter (Anzahl der Buckets) sollte ein numerischer Ausdruck sein, der einen positiven Integerwert 0, NULL auswertet. Oder ein negativer Wert führt zu einem Fehler. Die Buckets sind von 0 bis (n 1) nummeriert. Bucket 0 enthält die Anzahl der Werte, die kleiner als das Minimum sind. Bucket (n 1) enthält die Anzahl der Werte, die größer oder gleich dem maximalen angegebenen Wert sind. WIDTHBUCKET Syntax Das WIDTHBUCKET nimmt vier Ausdrücke als Parameter an. Der erste Parameter ist der Ausdruck, für den das equiwidth-Histogramm gilt. Der zweite und dritte Parameter sind Ausdrücke, die die Endpunkte des akzeptablen Bereichs für den ersten Parameter bezeichnen. Der vierte Parameter bezeichnet die Anzahl der Buckets. Betrachten Sie die folgenden Daten von Tischkunden. Dass die Kreditlimiten von 17 Kunden zeigt. Diese Daten werden in der Abfrage in Beispiel 21-20 gesammelt. In der Tabelle Kunden. Die Spalte custcreditlimit enthält Werte zwischen 1500 und 15000, und wir können die Werte zu vier Equiwidth Buckets, nummeriert von 1 bis 4, mit WIDTHBUCKET (custcreditlimit, 0, 20000, 4) zuweisen. Idealerweise ist jede Schaufel ein geschlossenes Intervall der reellen Zahlenlinie, z. B. ist die Schaufelzahl 2 Scores zwischen 5000.0000 und 9999.9999 zugeordnet. Manchmal mit 5000, 10000 bezeichnet), um anzuzeigen, daß 5.000 in dem Intervall enthalten sind und 10.000 ausgeschlossen sind. Um Werte außerhalb des Bereichs 0, 20.000 zu erfassen, werden Werte kleiner als 0 einer bezeichneten Unterlaufschaufel mit der Nummer 0 zugewiesen und Werte größer oder gleich 20.000 einer bezeichneten Überlaufschaufel, die mit 5 (num Schaufeln 1 Im Algemeinen). Siehe Abbildung 21-3 für eine grafische Darstellung, wie die Buckets zugeordnet sind. Abbildung 21-3 Bucket-Zuweisungen Sie können die Schranken in umgekehrter Reihenfolge angeben, zB WIDTHBUCKET (custcreditlimit 20000. 0. 4). Wenn die Schranken umgekehrt werden, sind die Buckets offen-geschlossene Intervalle. In diesem Beispiel ist die Schaufelzahl 1 (15000,20000, die Schaufelzahl 2 ist (10000,15000 und die Schaufelzahl 4, (0, 5000. Die Überlaufschaufel wird mit 0 (20000. unendlich) und die Unterlaufschaufel numeriert Beispiel 21-20 WIDTHBUCKET In der folgenden Abfrage werden die Bucket-Nummern für die Kreditlimiten in der Kundentabelle für beide Fälle angezeigt, in denen die Option " Benutzerdefinierte Aggregatfunktionen Oracle bietet eine Möglichkeit zur Erstellung eigener Funktionen, sogenannte benutzerdefinierte Aggregatfunktionen, die in Programmiersprachen wie PL geschrieben werden / SQL, Java und C und können als analytische Funktionen oder Aggregate in materialisierten Sichten verwendet werden Weitere Informationen zu Syntax und Einschränkungen finden Sie im Oracle Database Data Cartridge Developers Guide Die Vorteile dieser Funktionen sind: Es können hochkomplexe Funktionen programmiert werden Eine vollständig prozedurale Sprache. Höhere Skalierbarkeit als andere Techniken, wenn benutzerdefinierte Funktionen für die Parallelverarbeitung programmiert werden. Objektdatentypen können verarbeitet werden. Als einfaches Beispiel für eine benutzerdefinierte Aggregatfunktion ist die Skew-Statistik zu betrachten. Diese Berechnung mißt, wenn ein Datensatz eine schiefe Verteilung um seinen Mittelwert hat. Es wird Ihnen sagen, wenn ein Schwanz der Verteilung ist deutlich größer als die anderen. Wenn Sie ein benutzerdefiniertes Aggregat namens udskew erstellt und auf die Kreditlimitdaten des vorherigen Beispiels angewendet haben, können die SQL-Anweisung und die Ergebnisse wie folgt aussehen: Bevor Sie benutzerdefinierte Aggregatfunktionen erstellen, sollten Sie prüfen, ob Ihre Anforderungen erfüllt werden können In regelmäßigen SQL. Viele komplexe Berechnungen sind direkt in SQL möglich, insbesondere durch Verwendung des CASE-Ausdrucks. Der Aufenthalt mit regulärem SQL ermöglicht eine einfachere Entwicklung, und viele Abfrageoperationen sind in SQL bereits gut parallelisiert. Selbst das frühere Beispiel, die Skew-Statistik, kann mit Standard, wenn auch langwierig, SQL erstellt werden. CASE-Ausdrücke Oracle unterstützt jetzt einfache und durchsuchte CASE-Anweisungen. CASE-Anweisungen sind ähnlich im Sinne der DECODE-Anweisung, aber sie bieten mehr Flexibilität und logische Macht. Sie sind auch leichter zu lesen als herkömmliche DECODE-Anweisungen und bieten auch eine bessere Leistung. Sie werden häufig beim Brechen von Kategorien in Eimer wie Alter (z. B. 20-29, 30-39, und so weiter) verwendet. Die Syntax für einfache CASE-Anweisungen lautet: Einfache CASE-Ausdrücke testen, ob der expr - Wert gleich dem comparisonexpr ist. Die Syntax für gesuchte CASE-Anweisungen lautet: Sie können jede Art von Bedingung in einem gesuchten CASE-Ausdruck verwenden, nicht nur einen Gleichheitstest. Sie können nur 255 Argumente und jedes WHEN angeben. DANN Paar zählt als zwei Argumente. Um diese Grenze zu überschreiten, können Sie CASE-Ausdrücke verschachteln, so dass das returnexpr selbst ein CASE-Ausdruck ist. Beispiel 21-21 CASE Angenommen, Sie wollten das durchschnittliche Gehalt aller Mitarbeiter im Unternehmen finden. Wenn ein Arbeitnehmergehalt weniger als 2000 ist, möchten Sie, dass die Abfrage 2000 stattdessen verwendet. Ohne CASE-Anweisung können Sie diese Abfrage wie folgt schreiben: Beachten Sie, dass dies gegen das hr-Beispielschema läuft. In diesem Fall ist foo eine Funktion, die ihre Eingabe zurückgibt, wenn die Eingabe größer als 2000 ist und gibt ansonsten 2000 zurück. Die Abfrage hat Auswirkungen auf die Leistung, da sie eine Funktion für jede Zeile aufrufen muss. Das Schreiben von benutzerdefinierten Funktionen kann auch die Entwicklungslast hinzufügen. Unter Verwendung von CASE-Ausdrücken in der Datenbank ohne PL / SQL kann diese Abfrage umgeschrieben werden als: Mit einem CASE-Ausdruck können Sie vermeiden, benutzerdefinierte Funktionen zu entwickeln und können auch schneller ausgeführt werden. Beispiel 21-22 CASE für die Aggregation von Independent Subsets Die Verwendung von CASE innerhalb von Aggregatfunktionen ist eine bequeme Möglichkeit, Aggregate auf mehreren Teilmengen von Daten auszuführen, wenn eine einfache GROUP BY nicht ausreicht. Beispielsweise könnte das vorhergehende Beispiel mehrere AVG-Spalten in seiner SELECT-Liste enthalten haben, jedes mit seinem eigenen CASE-Ausdruck. Vielleicht haben wir eine Abfrage finden die durchschnittliche Gehalt für alle Mitarbeiter in den Gehaltsspannen 0-2000 und 2000-5000 gehabt haben. Es würde folgendermaßen aussehen: Obwohl diese Abfrage die Aggregate unabhängiger Untergruppen-Daten in separate Spalten platziert, können wir die Aggregate als Zeilen einer einzelnen Spalte anzeigen, indem wir der GROUP BY-Klausel einen CASE-Ausdruck hinzufügen. Der nächste Abschnitt zeigt die Flexibilität dieses Ansatzes mit zwei Ansätzen zur Erstellung von Histogrammen mit CASE. Erstellen von Histogrammen mit benutzerdefinierten Buckets Sie können die CASE-Anweisung verwenden, wenn Sie Histogramme mit benutzerdefinierten Buckets (sowohl in der Anzahl der Buckets als auch in der Breite der einzelnen Bucket) erhalten möchten. Es folgen zwei Beispiele für Histogramme, die mit CASE-Anweisungen erstellt wurden. Im ersten Beispiel werden die Histogramm-Summen in mehreren Spalten angezeigt und eine einzelne Zeile wird zurückgegeben. Im zweiten Beispiel wird das Histogramm mit einer Label-Spalte und einer einzelnen Spalte für Summen dargestellt, und mehrere Zeilen werden zurückgegeben. Beispiel 21-23 Histogramm Beispiel 1 Beispiel 21-24 Histogramm Beispiel 2 Datenverdichtung für die Meldung Daten werden normalerweise in spärlicher Form gespeichert. Das heißt, wenn kein Wert für eine gegebene Kombination von Dimensionswerten existiert, existiert keine Zeile in der Faktentabelle. Sie können die Daten jedoch in dichter Form anzeigen, wobei Zeilen für alle Kombinationen von Bemaßungswerten angezeigt werden, auch wenn keine Faktendaten für sie vorhanden sind. Wenn beispielsweise ein Produkt während eines bestimmten Zeitraums nicht verkauft wurde, können Sie das Produkt weiterhin für diesen Zeitraum sehen, wenn der Verkaufswert daneben liegt. Darüber hinaus können Zeitreihenberechnungen am einfachsten durchgeführt werden, wenn Daten entlang der Zeitdimension dicht sind. Dies liegt daran, dass dichte Daten eine konsistente Anzahl von Zeilen für jede Periode füllen, was wiederum es einfach macht, die analytischen Fensterfunktionen mit physischen Offsets zu verwenden. Datenverdichtung ist der Prozess der Umwandlung von spärlichen Daten in dichte Form. Um das Problem der Sparsität zu überwinden, können Sie eine partitionierte äußere Verknüpfung verwenden, um die Lücken in einer Zeitreihe oder einer anderen Dimension zu füllen. Eine solche Verknüpfung erweitert die herkömmliche äußere Verknüpfungssyntax, indem die äußere Verknüpfung auf jede in einer Abfrage definierte logische Partition angewendet wird. Oracle partitioniert die Zeilen in Ihrer Abfrage auf der Grundlage des in der PARTITION BY-Klausel angegebenen Ausdrucks logisch. Das Ergebnis einer partitionierten äußeren Verknüpfung ist eine UNION der äußeren Verknüpfungen von jeder der Partitionen in der logisch partitionierten Tabelle mit der Tabelle auf der anderen Seite der Verknüpfung. Beachten Sie, dass Sie diese Art von Verknüpfung verwenden können, um die Lücken in beliebigen zu füllen Dimension, nicht nur die Zeitdimension. Die meisten Beispiele beziehen sich hier auf die Zeitdimension, da sie die am häufigsten verwendete Dimension für Vergleiche ist. Partition Join Syntax Die Syntax für partitionierte äußere Verknüpfung erweitert die ANSI SQL JOIN-Klausel um den Ausdruck PARTITION BY, gefolgt von einer Ausdrucksliste. Die Ausdrücke in der Liste geben die Gruppe an, auf die die äußere Verknüpfung angewendet wird. Im Folgenden finden Sie die beiden Syntaxformen, die normalerweise für partitionierte äußere Verknüpfungen verwendet werden: Beachten Sie, dass FULL OUTER JOIN nicht mit einer partitionierten äußeren Verknüpfung unterstützt wird. Beispiel von Sparse-Daten Eine typische Situation mit einer spärlichen Dimension wird im folgenden Beispiel gezeigt, das die wöchentlichen Verkäufe und den Jahresabschluss für das Produkt Bounce für die Wochen 20-30 in den Jahren 2000 und 2001 berechnet Erwarten würde 22 Reihen von Daten (11 Wochen jeweils von 2 Jahren), wenn die Daten waren dicht. Allerdings erhalten wir nur 18 Zeilen, weil die Wochen 25 und 26 im Jahr 2000 und die Wochen 26 und 28 im Jahr 2001 fehlen. Füllen von Datenlücken Wir können die spärlichen Daten der vorhergehenden Abfrage nehmen und eine partitionierte äußere Verknüpfung mit einer dichten Menge von Zeit durchführen Daten. In der folgenden Abfrage übergeben wir unsere ursprüngliche Abfrage als v und wir wählen Daten aus der Zeittabelle, die wir alias als t. Hier werden 22 Zeilen abgerufen, da es keine Lücken in der Reihe gibt. Die vier hinzugefügten Zeilen haben jeweils 0, wenn der Verkaufswert auf 0 gesetzt wird, indem die NVL-Funktion verwendet wird. Beachten Sie, dass in dieser Abfrage eine WHERE-Bedingung für Wochen zwischen 20 und 30 in der Inline-Ansicht für die Zeitdimension platziert wurde. Dies wurde eingeführt, um die Ergebnismenge klein zu halten. Füllen von Lücken in zwei Dimensionen N-dimensionale Daten werden typischerweise als ein dichter zweidimensionaler Querstreifen von (n - 2) Seitenabmessungen angezeigt. Dies erfordert, dass alle Bemaßungswerte für die beiden Dimensionen, die in der Quer-Registerkarte angezeigt werden, eingegeben werden. Im Folgenden ist ein anderes Beispiel, bei dem die partitionierte äußere Verknüpfungsfunktion zum Füllen der Lücken auf zwei Dimensionen verwendet werden kann: In dieser Abfrage die WITH-Unterabfrage Factoring-Klausel V1 fasst die Umsatzdaten auf Produkt-, Länder - und Jahresebene zusammen. Dieses Ergebnis ist spärlich, aber Benutzer können alle Länder-, Jahr-Kombinationen für jedes Produkt sehen. Um dies zu erreichen, nehmen wir jede Partition von v1 basierend auf Produktwerten und äußere verbinden sie auf der Land-Dimension zuerst. Dieses gibt uns alle Werte des Landes für jedes Produkt. Wir nehmen dann dieses Ergebnis und partitionieren es auf Produkt-und Landeswerte und dann äußere verbinden sie auf Zeitdimension. Damit erhalten Sie für jede Produkt - und Länderkombination alle Zeitwerte. Füllen von Lücken in einer Inventartabelle In einer Inventartabelle wird in der Regel eine Menge von Einheiten angezeigt, die für verschiedene Produkte verfügbar sind. Diese Tabelle ist spärlich: sie speichert nur eine Zeile für ein Produkt, wenn es ein Ereignis gibt. Für eine Verkaufstabelle ist die Veranstaltung ein Verkauf, und für die Inventartabelle ist das Ereignis eine Mengenänderung, die für ein Produkt verfügbar ist. Beachten Sie zum Beispiel die folgende Inventartabelle: Die Inventartabelle verfügt nun über die folgenden Zeilen: Für Berichtszwecke können Benutzer diese Inventardaten anders sehen. Sie können z. B. alle Werte der Zeit für jedes Produkt sehen. Dies kann durch partitionierte äußere Verknüpfung erreicht werden. Außerdem können Benutzer für die neu eingefügten Zeilen fehlender Zeitperioden die Werte für Mengeneinheitsspalten sehen, die von der aktuellsten vorhandenen Zeitdauer übertragen werden sollen. Letzteres kann mit dem analytischen Fensterfunktion-LASTVALUE-Wert erreicht werden. Hier ist die Abfrage und die gewünschte Ausgabe: Die innere Abfrage berechnet eine partitionierte äußere Verknüpfung auf Zeit innerhalb jedes Produkts. Die innere Abfrage verdichtet die Daten auf der Zeitdimension (dh die Zeitdimension hat nun eine Zeile für jeden Wochentag). Für die neu hinzugefügten Zeilen hat die Maßsäulenmenge jedoch Nullen (siehe die Ausgabe in der Spaltenmenge in den folgenden Ergebnissen: Die äußere Abfrage verwendet die analytische Funktion LASTVALUE.) Bei Anwendung dieser Funktion werden die Daten nach Produkt partitioniert und die Daten auf der (Timeid) Für jede Zeile findet die Funktion aufgrund der Option IGNORE NULLS, die Sie sowohl mit LASTVALUE als auch mit FIRSTVALUE verwenden können, den letzten Nicht-Nullwert im Fenster. In der Spalte repequentity sehen wir die gewünschte Ausgabe Die folgende Ausgabe: Berechnen von Datenwerten zum Füllen von Lücken Beispiele im vorherigen Abschnitt veranschaulichen, wie partitionierte äußere Verknüpfung verwendet wird, um Lücken in einer oder mehreren Dimensionen zu füllen. Die Ergebnismengen, die durch partitionierte äußere Verknüpfung erzeugt werden, haben jedoch Nullwerte für Spalten, die nicht in enthalten sind Die PARTITION BY-Liste, die normalerweise analytische SQL-Funktionen verwenden, um diese Nullwerte durch einen Nicht-Nullwert zu ersetzen. Beispielsweise berechnet die folgende Abfrage monatliche Summen für Produkte 64 MB Speicherkarte und DVD-R Discs (Produkt-IDs 122 und 136) für das Jahr 2000. Es verwendet partitionierte äußere Verknüpfung, um Daten für alle Monate zu verdichten. Für die fehlenden Monate wird dann die analytische SQL-Funktion AVG verwendet, um die Umsätze und Einheiten als den Durchschnitt der Monate zu errechnen, in denen das Produkt verkauft wurde. Wenn Sie in SQLPlus arbeiten, werden die folgenden beiden Befehle die Spaltenüberschriften umreißen, um die Ergebnisse besser lesbar zu machen: Zeitreihenberechnungen für Densified Data Densificatio n ist nicht nur für Berichtszwecke gedacht. Es ermöglicht auch bestimmte Arten von Berechnungen, insbesondere Zeitreihenberechnungen. Zeitreihenberechnungen sind einfacher, wenn Daten entlang der Zeitdimension dicht sind. Dichte Daten weisen eine konsistente Anzahl von Zeilen für jede Zeitperiode auf, die es wiederum einfach macht, analytische Fensterfunktionen mit physischen Offsets zu verwenden. Um dies zu illustrieren, nehmen wir zunächst das Beispiel zum Füllen von Lücken in Daten. Und fügen Sie eine analytische Funktion zu dieser Abfrage hinzu. In der folgenden erweiterten Version berechnen wir wöchentlich jährliche Verkäufe neben dem wöchentlichen Verkauf. Die NULL-Werte, die die partitionierte äußere Verknüpfung bei der Herstellung der Zeitreihen dicht einfügt, werden in der üblichen Weise behandelt: Die SUM-Funktion behandelt sie als 0s. Period-to-Period-Vergleich für eine Zeitstufe: Beispiel Wie verwenden wir diese Funktion, um Werte über Zeiträume hinweg zu vergleichen. Im Einzelnen: Wie berechnen wir einen Vergleichsvergleich im Vergleich zum Vorjahr auf der Wochesebene Die folgende Abfrage gibt dieselbe Zeile zurück , Für jedes Produkt den Jahresabschluss für jede Woche von 2001 mit dem von 2000. Beachten Sie, dass wir in diesem Beispiel mit einer WITH-Klausel beginnen. Dies verbessert die Lesbarkeit der Abfrage und lässt uns auf den partitionierten äußeren Join fokussieren. Wenn Sie in SQLPlus arbeiten, wickelt der folgende Befehl die Spaltenüberschriften für eine bessere Lesbarkeit der Ergebnisse: In der FROM-Klausel der Inline-Ansicht densesales. Verwenden wir eine partitionierte äußere Verknüpfung der Aggregatansicht v und der Zeitansicht t, um Lücken in den Verkaufsdaten entlang der Zeitdimension zu füllen. Die Ausgabe der partitionierten äußeren Verknüpfung wird dann durch die analytische Funktion SUM verarbeitet. OVER, um den wöchentlichen Jahresabschluss zu berechnen (die weeklyytdsales Spalte). So berechnet die Ansicht densesales die Jahresabschlussdaten für jede Woche, einschließlich der fehlenden Summenansichten. Die Inline-Ansicht yearoveryearsales berechnet dann den vorjährigen wöchentlichen Jahresabschluss mit der LAG-Funktion. Die LAG-Funktion weeklyytdsalesprioryear gibt eine PARTITION BY-Klausel an, die Zeilen für die gleiche Woche der Jahre 2000 und 2001 in einer einzigen Partition paaren. Wir übergeben dann einen Offset von 1 an die LAG-Funktion, um das wöchentliche Jahr zu erhalten, um die Verkäufe für das vorherige Jahr zu erreichen. Der äußerste Abfrageblock wählt Daten von yearoveryearsales mit der Bedingung yr 2001. und so gibt die Abfrage für jedes Produkt seine wöchentliche zurück Jahr-to-date-Umsatz in den angegebenen Wochen der Jahre 2001 und 2000. Period-to-Period Vergleich für mehrere Zeitstufen: Beispiel Während das vorherige Beispiel zeigt uns einen Weg, um Vergleiche für ein einziges Zeitniveau zu schaffen, wäre es noch mehr Nützlich, um mehrere Zeitniveaus in einer einzelnen Abfrage zu behandeln. Zum Beispiel könnten wir den Umsatz gegenüber dem Vorjahreszeitraum auf Jahr, Quartal, Monat und Tagestufe vergleichen. Wie können wir eine Abfrage erstellen, die einen jährlichen Vergleich des Jahresabschlusses für alle Ebenen unserer Zeithierarchie durchführt. Wir werden diese Schritte in mehreren Schritten durchführen. Das Ziel ist eine einzelne Abfrage mit Vergleichen am Tag, Woche, Monat, Quartal und Jahr. Die Schritte sind wie folgt: Wir erstellen eine Ansicht namens cubeprodtime. Die einen hierarchischen Würfel von Umsatz aggregiert über Zeiten und Produkte hält. Dann erstellen wir eine Ansicht der Zeitdimension, die als Kante des Würfels verwendet werden soll. Die Zeitkante, die einen vollständigen Satz von Daten enthält, wird partitioniert mit den spärlichen Daten in der Ansicht cubeprodtime verbunden. Schließlich, für maximale Leistung, erstellen wir eine materialisierte Ansicht, mvprodtime. Gebaut mit der gleichen Definition wie cubeprodtime. Weitere Informationen zu hierarchischen Cubes finden Sie unter Kapitel 20, SQL für Aggregation in Data Warehouses. Die materialisierte Ansicht wird in Schritt 1 im folgenden Abschnitt definiert. Schritt 1 Erstellen Sie die hierarchische Cube-Ansicht Die materialisierte Ansicht, die im Folgenden dargestellt wird, kann in Ihrem System vorhanden sein, wenn nicht, erstellen Sie sie jetzt. Wenn Sie es generieren müssen, beachten Sie, dass wir die Abfrage auf nur zwei Produkte beschränken, um die Bearbeitungszeit kurz zu halten: Da diese Ansicht auf zwei Produkte beschränkt ist, gibt sie knapp über 2200 Zeilen zurück. Beachten Sie, dass die Spalte HierarchicalTime Stringdarstellungen von Zeit aus allen Ebenen der Zeithierarchie enthält. Der CASE-Ausdruck, der für die HierarchicalTime-Spalte verwendet wird, fügt eine Markierung (0, 1.) jeder Datumszeichenfolge hinzu, um die Zeitstufe des Wertes anzugeben. A 0 steht für das Jahr, 1 für Quartale, 2 für Monate und 3 für Tag. Beachten Sie, dass die GROUP BY-Klausel eine verkettete ROLLUP ist, die die Rollup-Hierarchie für die Zeit - und Produktdimensionen angibt. Die GROUP BY-Klausel bestimmt den hierarchischen Cube-Inhalt. Schritt 2 Erstellen Sie die Ansicht edgetime, die ein vollständiger Satz von Datumswerten ist Edgetime ist die Quelle für das Ausfüllen von Zeitlücken im hierarchischen Cube mit einem partitionierten äußeren Join. Die Spalte HierarchicalTime in edgetime wird in einer partitionierten Verknüpfung mit der Spalte HierarchicalTime in der View cubeprodtime verwendet. Die folgende Anweisung definiert edgetime: Schritt 3 Erstellen der materialisierten Ansicht mvprodtime zur Unterstützung schnellerer Performance Die materialisierte Viewdefinition ist ein Duplikat der zuvor definierten View cubeprodtime. Da es sich um eine doppelte Abfrage handelt, werden Verweise auf cubeprodtime neu geschrieben, um die materialisierte Ansicht mvprodtime zu verwenden. Die folgenden Materialisierungen können in Ihrem System vorhanden sein, wenn nicht, erstellen Sie sie jetzt. Wenn Sie es generieren müssen, beachten Sie bitte, dass wir die Abfrage auf nur zwei Produkte beschränken, um die Bearbeitungszeit kurz zu halten. Schritt 4 Erstellen der Vergleichsabfrage Wir haben nun die Stufe für unsere Vergleichsabfrage gesetzt. Wir können Periodenvergleichsberechnungen auf allen Zeitniveaus erhalten. Es erfordert das Anwenden analytischer Funktionen auf einen hierarchischen Würfel mit dichten Daten entlang der Zeitdimension. Einige der Berechnungen, die wir für jedes Zeitniveau erreichen können, sind: Summe der Verkäufe für vorherigen Zeitraum auf allen Zeitniveaus. Umsatzabweichung gegenüber Vorjahr. Summe des Umsatzes im gleichen Zeitraum vor einem Jahr auf allen Ebenen der Zeit. Umsatzveränderung im Vergleich zum Vorjahreszeitraum. Im folgenden Beispiel werden alle vier Berechnungen durchgeführt. Es verwendet eine partitionierte äußere Verknüpfung der Views cubeprodtime und edgetime, um eine Inline-Ansicht von dichten Daten namens densecubeprodtime zu erstellen. Z. B. . Bitte hilf mir.


No comments:

Post a Comment