2016-07-11 5 views
1

Ich versuche, ein Abfrageergebnis von BigQuery zurückgeben, die die Anzahl der Ereignisse nach Sitzung zurückgegeben. Ich habe in dem folgenden Artikel bezogen haben:BigQuery Ereignisanalyse Join in Subselect-Anweisung

http://developer.streak.com/2013/11/using-google-bigquery-for-event-tracking.html

Das Datenbankschema ist ziemlich einfach [sessionId, eventtype, createdAt] Das zurückkehrende Ergebnismenge auf ein Ereignis Workflow in Google Analytics ähnlich sein würde. So etwas wie [sessionId, num_event1, num_event2, ...]

Der Ansatz besteht darin, Unterabfragen nach Ereignistyp und Zeitstempel zu generieren und dann zusätzliche Unterabfragen zu erstellen, die die Ergebnisse aus jeder der Ereignisunterabfragen verbinden. Ich bin in der Lage zu tun Schritt 1, Schritt 2, Schritt 3 Subqueries in Isolation:

SELECT COUNT(first_event_timestamp) AS number_first_events, 
     COUNT(second_event_timestamp) AS number_second_events, 
     COUNT(third_event_timestamp) AS number_third_events 
FROM 

(SELECT eventUid AS eventUid1, 
     createdAt AS timestamp1 
FROM [events_table] 
WHERE eventType = 'first-event') step1, 

(SELECT eventUid AS eventUid2, 
     createdAt AS timestamp2 
    FROM [events_table] 
    WHERE eventType = 'second-event') step2, 

(SELECT 
    eventUid as sessionId3, 
    createdAt as timestamp3   
    FROM 
    [events_table]   
    WHERE 
    eventType = "third_event") step3 

Hinzufügen steps1_2, steps1_2_3 ist, wo ich eine Wand am schlägt. Ich bekomme einen Fehler, dass der Dateiname in der Tabelle fehlt. Hier ist die vollständige Abfrage: sessionId num_first_event num_second_event num_third_event S1 1 null null S2 2 3 null S3 4 5 6

Mein erster:

SELECT COUNT(first_event_timestamp) AS num_first, 
     COUNT(second_event_timestamp) AS num_second, 
     COUNT(third_event_timestamp) AS num_third 
FROM (SELECT 
      sessionId 
      first_event_timestamp, 
      second_event_timestamp, 
      third_event_timestamp 
     FROM steps1_2_3 
     GROUP BY sessionId), 

     (SELECT 
      sessionId AS sessionId1, 
      createdAt AS timestamp1   
     FROM 
      [events_table]   
     WHERE 
      eventType = "first_event") step1,   (SELECT 
      eventUid AS sessionId2, 
      createdAt AS timestamp2   
     FROM 
      [events_table]   
     WHERE 
      eventType = "second_event") step2,  (SELECT 
      eventUid AS sessionId3, 
      createdAt AS timestamp3   
     FROM 
      [events_table]   
     WHERE 
      eventType = "third_Event") step3,   (SELECT sessionId1, 
        timestamp1, 
        IF(timestamp1 < timestamp2, timestamp2, NULL) AS timestamp2 
      FROM 
        (SELECT sessionId1, 
          timestamp1, 
          timestamp2 
        FROM step1 
        LEFT JOIN step2 
        ON sessionId1 = sessionId2)) steps1_2, (SELECT sessionId1 as sessionId, 
       timestamp1 as first_event_timestamp, 
       timestamp2 as second_event_timestamp, 
       IF(timestamp2 < timestamp3, timestamp3, NULL) as third_event_timestamp 
     FROM 
      (SELECT sessionId2, 
        timestamp2, 
        timestamp3 
      FROM steps1_2 
      LEFT JOIN step3 
      ON sessionId1 = sessionId3) 
      ) steps1_2_3 

Das ideale Ergebnismenge in etwa wie folgt aussehen würde Frage ist, ob es möglich ist, in Unterabfragen steps1_2, steps1_2_3 beizutreten?

Alternative Ansätze zum Erreichen eines Ereignisses wie Arbeitsablauf in BigQuery, anstatt die Anzahl der Zeitstempel zu zählen?

Jeder Tipp oder vorgeschlagene Dokumentation wird sehr geschätzt Darüber hinaus, vielen Dank für Ihre Zeit und Rücksicht.

+0

Wichtige auf SO, können Sie Antwort markieren, indem Sie das Häkchen auf der linken Seite der entsandten Antwort akzeptiert, unter der Abstimmung. Siehe http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235, warum dies wichtig ist. Es gibt mehr ... Sie können überprüfen, was zu tun ist, wenn jemand Ihre Frage beantwortet - http://stackoverflow.com/help/someone-answers. –

Antwort

0

Wie sei es

SELECT 
    sessionId, 
    SUM(eventType = 'first-event') AS number_first_events, 
    SUM(eventType = 'second-event') AS number_second_events, 
    SUM(eventType = 'third-event') AS number_third_events 
FROM [events_table] 
GROUP BY sessionId 
+0

Hattest du die Chance, dass es funktioniert? oder noch ausstellen? –