2017-10-31 1 views
2

Ich habe ein Dataset, in dem Ansichten innerhalb von Sitzungen verschachtelt sind, und ich möchte eine Anzahl von Ansichten für jede Sitzung. Was ist der effizientere/richtige Weg, um eine solche Abfrage zu strukturieren?Bigquery SQL - Ist es besser, in SELECT oder JOIN zu nesnest?

Gibt es Dokumentation, die über die bevorzugte Möglichkeit zum Schreiben von Abfragen in BigQuery SQL spricht?

SELECT session_key, (SELECT COUNT(view_id) FROM UNNEST(views) views) AS view_count 
FROM sessions 
WHERE _PARTITIONTIME >= TIMESTAMP('2016-04-01') ; 

SELECT session_key, COUNT(view_id) AS view_count 
FROM sessions 
    LEFT JOIN UNNEST(views) views 
WHERE _PARTITIONTIME >= TIMESTAMP('2016-04-01') 
GROUP BY session_key; 

Danke

+0

https://firebase.googleblog.com/2017/03/bigquery-tip-unnest-function.html – SriniV

Antwort

2

Arbeits Anfragen:

a)

SELECT visitId, (SELECT COUNT(hitNumber) FROM UNNEST(hits)) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910` 

b)

SELECT visitId, COUNT(hitNumber) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910` 
LEFT JOIN UNNEST(hits) 
GROUP BY visitId 

Die erste Abfrage sieht kürzer und prägnanter, aber wir auch Sehen Sie sich die Erklärung an :

a) enter image description here

b) enter image description here

Es sieht auch besser zur Ausführungszeit! Wahrscheinlich, weil die zweite Abfrage eine GROUP BY visitId hat, die BigQuery dazu zwingt, nachzusehen, ob es andere Sitzungen mit derselben ID gibt.

Aber wenn Sie sich für eine noch prägnante Option suchen:

SELECT visitId, ARRAY_LENGTH(hits) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910` 
+0

Gibt es eine Verknüpfung wie ARRAY_LENGTH (Treffer), wenn es eine andere Ebene geschachtelt ist " Aufrufe "aufgerufene" Klicks "und ich möchte die Klickanzahl auf einer Sitzungsebene abrufen? –

+0

Mit Punkten navigieren? Ich kann Ihnen eine spezifische Antwort geben, wenn Sie mir einen bestimmten Datensatz geben. –

1

Es geht nicht nur um which way better? - auch über which way reflects your goal? ist, weil die Ergebnisse davon sind anders! Und Sie können dies in Felipe Antwort sehen - erste Abfrage gibt 63 Zeilen und zweite Abfrage gibt 62 Zeilen zurück

So gibt die erste Abfrage nur so viele Zeilen zurück, wie Ihre sessions Tabelle zusammen mit Anzahl der Einträge in Array abgelegt hat.
Während die zweite Abfrage, zusätzlich zu den oben, Gruppen alle Zeilen und Aggregate jeweiligen Zählungen

Natürlich, wenn Sie Ihre Tabelle hat alle einzigartig visitId - dies erzeugt das gleiche Ergebnis
Aber weil diese zusätzliche Gruppierung - ich würde erwarten, zweite Abfrage, um teurer zu sein

Verwandte Themen