2017-05-18 3 views
0

Ich betrachte die besonderen Aktionen eines Besuchers auf unserer Website, nur um zu verstehen, wie einige Daten gesammelt werden und wie die Daten abgerufen werden, die ich brauche. Grundsätzlich werden bestimmte Aktionen ausgelöst, wenn ein Besucher bestimmte Bereiche unserer Website sieht und ich möchte sehen, ob diese Daten gesammelt werden.Warum, wenn ich in BigQuery zwei oder mehr Variablen nicht nesting, bekomme ich keine Ergebnisse?

Ich habe den folgenden Code ausführen, um die Seiten ein Besucher sieht und die Ereignisse ihrer Sitzung Brände zu identifizieren:

select fullvisitorid, visitid, date, hitnumber, type, page.pagepath, 
eventinfo.eventcategory, eventinfo.eventlabel, eventinfo.eventaction 
from `big-query-156009.xxxxxx.ga_sessions_*` t, t.hits as hits 
where _table_suffix between "20170511" and "20170511" 
and fullvisitorid = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' 
and visitid = xxxxxxxxx 
order by hitnumber 

Das funktioniert völlig in Ordnung, und ich kann die Reise des Besuchers sehen. Ich möchte auch

hits.promotion.promoid, 
hits.promotion.promoname, 
hits.promotion.promocreative, 
hits.promotion.promoposition, 
hits.promotionactioninfo.promoisview, 
hits.promotionactioninfo.promoisclick 

in ziehen habe ich versucht, dies mit dem folgenden Code:

select fullvisitorid, 
visitid, 
date, 
hitnumber, 
type, 
page.pagepath, 
eventinfo.eventcategory, 
eventinfo.eventlabel, 
eventinfo.eventaction, 
promotion.promoId, 
promotion.promoname, 
promotion.promocreative, 
promotion.promoposition, 
promotionactioninfo.promoIsView, 
promotionactioninfo.promoIsclick 
from `big-query-156009.xxxxxx.ga_sessions_*` t, t.hits as hits, 
hits.promotion as promotion 
where _table_suffix between "20170511" and "20170511" 
and fullvisitorid = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' 
and visitid = xxxxxxxxx 
order by hitnumber 

jedoch, wenn ich dies tun, werden genau die gleichen fullVisitorId, visitid, Termine und Daten-Set usw. Ich bekomme keine Ergebnisse. Keine Fehler oder irgendetwas nur keine Ergebnisse.

Ich verstehe die Verschachtelung nicht vollständig, also gehe ich davon aus, dass ich einfach etwas Einfaches vermisse.

Gibt es eine Möglichkeit, um alle diese Daten in einer Abfrage zu ziehen oder muss ich Unterabfragen tun?

Danke

Antwort

2

Durch das Komma (Join) Operator zwischen der Tabelle, t.hits und hits.promotion Sie das Kreuzprodukt der Elemente der Anordnungen einnehmen. In diesem Fall passiert Folgendes: Da eines der Arrays leer ist (wahrscheinlich hits.promotion), erhalten Sie seit 1 * <number of hits> * 0 = 0 ein leeres Ergebnis. Um noch eine Zeile zu erhalten, wenn eines der Arrays leer ist, verwenden Sie verbinden eine linke statt, zum Beispiel:

from `big-query-156009.xxxxxx.ga_sessions_*` t 
LEFT JOIN UNNEST(t.hits) as hits 
LEFT JOIN UNNEST(hits.promotion) as promotion 
where ... 
+0

schön! das funktioniert perfekt. Danke Elliott! –

0

Eine andere Technik, die Sie in dieser Art von Analysen helfen können läuft wie folgt:

SELECT 
    fullvisitorid fv, 
    visitid v, 
    ARRAY(SELECT AS STRUCT hits.hitnumber, hits.type, page.pagepath, eventinfo.eventcategory, promotion FROM UNNEST(hits) hits ORDER BY hitnumber) hits 
FROM `big-query-156009.xxxxxx.ga_sessions_*` 
WHERE 
1 = 1 
AND EXISTS(SELECT 1 FROM UNNEST(hits) hits WHERE ARRAY_LENGTH(hits.promotion) > 0) 

Beachten Sie, dass der Prozess UNNESTING jetzt nur in der Zeilenebene stattfindet, nicht als CROSS-JOIN.

Sie können auch die WHERE-Klausel verwenden auszufiltern, was genau Sie (in diesem Fall möchte ich entfernt alle Zeilen, die keine Förderung ID zugeordnet hatte. Sie können auch zum Beispiel herauszufiltern nur bestimmte eventcategories oder Etiketten wenn Sie wollen).

Verwandte Themen