2017-08-17 3 views
1

Ich arbeite zum ersten Mal an einem Event-Stream, so dass ich mich selbst nicht an einem Tisch angeschlossen habe. Ich versuche, SQL-Skript zu schreiben, um mir Ladezeit der Chat-Lobby zu geben, sobald der Benutzer sich eingeloggt hat. Unten habe ich ein Beispielskript für eine ETL. Ich möchte wissen, ob es einen besseren Weg gibt, Joins als das, was ich getan habe, zu tun. Ich habe auch darüber nachgedacht, die Unterabfragen in zwei separate Tabellen zu zerlegen und einen Linksbündnis zu machen, aber nicht sicher, welcher Weg als optimal und besser angesehen wird. Ich dachte auch daran, CTE zu machen.Was ist der effiziente Weg, sich selbst einem Ereignisstrom anzuschließen?

DROP TABLE IF EXISTS event_stream; 
create table event_stream 
(
    event varchar(50), 
    action varchar(100), 
    userid int, 
    session_id int, 
    date timestamp 
); 


INSERT INTO event_stream(event, action, userid, date,session_id) VALUES 
('login', 'success', 1, '2017-08-15 12:30',100), 
('chatlobby','loaded', 1, '2017-08-15 12:30:10',100), 
('entered_chatroom','chatroom1',1,'8/15/2017 12:31',100), 
('login', 'success', 54, '2017-08-15 01:30',101), 
('chatlobby','loaded', 54, '2017-08-15 01:30:05',101), 
('entered_chatroom','chatroom2',54,'8/15/2017 01:31',101); 

Select a.userid, a.session_id, b.date - a.date as load_time 
from 
    (Select * from event_stream where event = 'login' and action='success') a 
JOIN 
    (Select * from event_stream where event = 'chatlobby' and action = 'loaded') b 
ON a.session_id = b.session_id 

Das Skript oben I wurde unter Verwendung der PostgreSQL getan

+0

Es tut mir leid, wenn ich unhöflich bin, aber ist nicht ein ETL genau verwendet, um SQL durch mehr visuellen Code zu ersetzen? Und was ist dein ETL? – AlainD

+0

Nun ... ja, ETL, aber das Unternehmen wechselt zu dieser Infrastruktur und zu SPARK und anderen Tools, nachdem wir noch in Betracht gezogen wurden, während wir versuchen, das Geschäft wie gewöhnlich laufen zu lassen. – codeBarer

+1

Ok, dann, während sie damit beschäftigt sind zu entscheiden, in welche Richtung sie wechseln werden, laden Sie vielleicht [Kettle] herunter (https://sourceforge.net/projects/pentaho/files/Data%20Integration). Es ist ein echtes ETL: Es funktioniert, es ist kostenlos, robust, transparent für SPARK und andere Datenquellen-Technos, und Sie können Ihr SQL direkt kopieren und einfügen, um das Geschäft wie gewohnt unter dem Radar zu betreiben. Genau wie ich. (Hinweis: Ich habe kein kommerzielles Interesse) – AlainD

Antwort

1

Das Äquivalent Ihrer Subqueries ist:

from event_stream login join event_stream load on login.session_id = load.session.id 
and login.action = 'success' 
and load.action = 'loaded' 

Das ist einfacher und Einfachheit hat seine Vorzüge. Um zu sehen, welcher Weg schneller geht, teste sie.

+0

Danke @ dan-bracuk was, wenn ich in den Unterabfragen Gruppen wegen doppelte Datensätze tun musste? – codeBarer

+0

Das ändert Ihre Frage. –

+0

Oh, es ist etwas, was ich gerade gedacht habe, wenn das passiert. Was Sie als Lösung gegeben haben, ist großartig! – codeBarer

Verwandte Themen