2016-07-29 4 views
0

Ich habe eine Tabelle, die appox hat. 450.000 Datensätze. Ich muss die durchschnittliche Datennutzung pro Tag pro Benutzer für Nicht-Google Mail-Benutzer finden. Die Anwendungsnamen wie gmail, facebook, yahoo.etc werden im Feld 'name' erfasst. Wenn "Name" einen Wert wie "gmail" hat, erfasst ein anderes Feld namens "label" einen Wert als "D", der angibt, dass die Datennutzung erfasst und in zwei anderen Feldern aktualisiert wird (Datausage1, database2). Ich kann nicht 'Name' und 'Label' in der gleichen Where-Klausel haben, da es andere Werte gibt, die in 'Label' erfasst werden. Daher habe ich die Tabellen wie folgt hinzugefügt, aber die Abfrage ist nicht effizient und es läuft für eine lange Zeit. Gibt es eine andere Möglichkeit, um die gewünschten Ergebnisse zu erhalten?BigQuery runnign lang - alternative Möglichkeit, um die gewünschte Ausgabe

(SELECT
t1.network AS-Netzwerk,
(((SUM (t2.datausage1) + SUM
(t2.datausage2))/1073741824)/EXACT_COUNT_DISTINCT (t1.user))/33 AS Avg_data_GigaBytes_Per_day_Per_User,
von
(SELECT Benutzer, Starttime,
Netzwerk
FROM [Mytable]
WHERE name NOT IN ('gmail')
) t1
JOIN
(SELECT Benutzer, datausage1, datausage2
FROM [Mytable]
WHERE label = 'T'
) t2
ON t1.user = t2.user
GROUP BY 1
)

+0

ist es einfach ineffizient? oder produziert falsches Ergebnis - was ich vermute es ist! Bitte klären Sie. und einige Beispiele von Daten wäre toll, wenn Sie zu Ihnen Frage –

Antwort

1

Versuchen unter

SELECT 
    network, 
    AVG(usage_per_day_by_user) AS usage_per_day_per_user_average 
FROM (
    SELECT 
    network, 
    user, 
    DATE(StartTime) AS usage_day, 
    SUM(t2.datausage1 + t2.datausage2)/1073741824 AS usage_per_day_by_user 
    FROM [mytable] 
    WHERE NOT name IN ('gmail') 
    AND label = 'D' 
    GROUP BY 1, 2, 3 
) 
GROUP BY network 

Below Aussage nicht klar ist, so dass ich es einfach ignoriert jetzt

I cannot have 'name' and 'label' in the same where clause as there are other values that are captured in 'label'

Btw, das Hauptproblem sehe ich Bei Ihrer Anfrage handelt es sich um eine Querverbindung von Einträgen für denselben Benutzer. so im Wesentlichen Sie 0,5 M Zeilen wird MM Zeilen und das ist, was dann für Sie aussieht wie langsam

+0

hinzufügen können Wenn Antwort Ihnen geholfen hat, Ihr Problem zu lösen, und Sie es akzeptierten, könnten Sie auch erwägen, es zu wählen. Weitere Informationen finden Sie unter http://stackoverflow.com/help/someone-answers und im Abschnitt "Upvote" in http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235 –

0

Ihre Abfrage fehlt einige Details, aber es klingt wie Sie eine bedingte Summe lieber als eine Verknüpfung möchten. Etwas entlang der Linien von:

SUM(IF(name='gmail' AND label='D',datausage1+datausage2,<however you calculate the non-gmail case>)) 
Verwandte Themen