Verknüpfen von Zeitreihendaten

Sie können das ASOF JOIN-Konstrukt verwenden, um Tabellen zu verknüpfen, die Zeitreihendaten enthalten. ASOF JOIN ist als Standardsyntax innerhalb der FROM-Klausel einer SELECT-Anweisung verfügbar. Obwohl ASOF JOIN-Abfragen durch die Verwendung von komplexer SQL, anderen Typen von Joins und Fensterfunktionen emuliert werden können, sind diese Abfragen einfacher zu schreiben (und oft leistungsfähiger), wenn Sie die ASOF JOIN-Syntax verwenden.

Einführung

Sie können ASOF-Joins verwenden, um Zeitreihendaten, wie z. B. Finanzhandelsdaten, zu analysieren. Für die Transaktionskostenanalyse sind beispielsweise „Slippage“-Berechnungen erforderlich, mit denen die Differenz zwischen dem zum Zeitpunkt der Kaufentscheidung einer Aktie notierten Kurs und dem tatsächlich gezahlten Preis bei Ausführung und Verbuchung der Order gemessen wird. Mit ASOF JOIN können diese Typen von Analysen beschleunigt werden. Da die Hauptfähigkeit dieser Join-Methode in der Analyse einer Zeitreihe in Bezug auf eine andere besteht, kann ASOF JOIN für die Analyse jedes beliebigen historischen Datensets nützlich sein, wie z. B. Wetterbeobachtungen, Messwerte von Sensoren oder Prüfpfade (Audit Trails). In vielen dieser Anwendungsfälle kann ASOF JOIN verwendet werden, um Daten zuzuordnen, wenn die Zeitstempel der Messwerte verschiedener Geräte nicht exakt übereinstimmen.

Es wird davon ausgegangen, dass die zu analysierenden Zeitreihendaten in zwei Tabellen vorliegen und dass es für jede Zeile in jeder Tabelle einen Zeitstempel gibt. Dieser Zeitstempel gibt das genauen („as of“) Zeitpunkt (Datum und Uhrzeit) für ein erfasstes Ereignis an. Für jede Zeile in der ersten (oder linken) Tabelle verwendet die Verknüpfung eine „Übereinstimmungsbedingung“ mit einem Vergleichsoperator, den Sie angeben, um eine einzelne Zeile in der zweiten (oder rechten) Tabelle zu finden, bei der der Zeitstempelwert eines der folgenden Merkmale aufweist:

  • Kleiner als oder gleich dem Zeitstempelwert in der linken Tabelle

  • Größer als oder gleich dem Zeitstempelwert in der linken Tabelle

  • Kleiner als der Zeitstempelwert in der linken Tabelle

  • Größer als der Zeitstempelwert in der linken Tabelle

Die passende Zeile auf der rechten Seite ist die mit der besten Übereinstimmung, deren Zeitpunkt gleich, früher oder später liegen kann, je nach dem angegebenen Vergleichsoperator.

Die Kardinalität des Ergebnisses von ASOF JOIN ist immer gleich der Kardinalität der linken Tabelle. Wenn die linke Tabelle 40 Millionen Zeilen enthält, gibt ASOF JOIN 40 Millionen Zeilen. Daher kann die linke Tabelle als „bewahrende“ Tabelle und die rechte Tabelle als „referenzierte“ Tabelle gedacht werden.

Konzeptuelles Beispiel für eine ASOF JOIN-Abfrage

In einer Finanzanwendung könnten Sie zum Beispiel eine Tabelle namens quotes und eine Tabelle namens trades haben. In der einen Tabelle wird die Historie der Kaufangebote für Aktien erfasst, in der anderen die Historie des tatsächlichen Handels. Ein Angebot zum Kauf von Aktien erfolgt vor dem Handel (oder möglicherweise zur „gleichen“ Zeit, je nach Granularität der erfassten Zeit). Beide Tabellen enthalten Zeitstempel, und beide enthalten andere Spalten von Interesse, die Sie vielleicht vergleichen möchten. Eine einfache ASOF JOIN-Abfrage liefert den (zeitlich) nächstgelegenen Kurs vor dem jeweiligen Handel. Mit anderen Worten, die Frage lautet: Wie hoch war der Kurs einer bestimmten Aktie zu dem Zeitpunkt, als ich einen Handel tätigte?

Angenommen, die Tabelle trades enthält drei Zeilen und die Tabelle quotes enthält sieben Zeilen. Die Hintergrundfarbe der Zellen zeigt an, welche drei Zeilen aus quotes für ASOF JOIN in Frage kommen, wenn die Zeilen bei übereinstimmenden Aktiensymbolen verknüpft und ihre Zeitstempelspalten verglichen werden.

Tabelle TRADES (linke oder „bewahrende“ Tabelle)

Daten der Handelstabelle, bestehend aus drei Zeilen, die mit drei Zeilen der Kurstabelle verknüpft sind.

Tabelle QUOTES (rechte oder „referenzierte“ Tabelle)

Daten der Kurstabelle, bestehend aus sieben Zeilen, die die drei spezifischen Zeilen identifizieren, die für die Verknüpfung mit der Kurstabelle in Frage kommen.

Die Syntax, die die Kombination dieser drei hervorgehobenen Zeilen ergibt, (und viele weitere Beispiele) finden Sie unter Join mit Match- und ON-Bedingungen.