2017-07-03 2 views
0

Wir versuchen, Skript für einen Trichter für Google BigQuery zu verwenden, dass Doug Mackenzie hier verknüpft erstellt: http://online-behavior.com/analytics/funnel-analysis Wir haben einige Probleme mit unserem SQL-Aufruf aufgetreten.Funnel Legacy SQL Filter Probleme - BigQuery

Wir versuchen, einen Filter aus einem hits.customDimensions.index = 20 zu verwenden, wo der Wert 1 ist. Diese Werte sind immer vorhanden, daher ist ein einfacher Filter wie der in seiner Einführung als Beispiele verwendete leider nicht ausreichend . Ein Filter wie:
WHERE hits.customDimensions.index = '20' Filtert nicht, was wir gefiltert haben müssen.
Vielmehr brauchen wir (wir denken) so etwas wie dieses:

WHERE MAX(IF(hits.customDimensions.index=20,hits.customDimensions.value,NULL)) WITHIN hits as locked= '1'

Dies ist, wie wir es versucht haben zu tun:

FROM (
    SELECT 
     fullVisitorId, 
     visitId, 
     MIN(hits.hitNumber) AS firstHit, 
     MAX(IF(hits.isExit, 1, 0)) AS exit 
    FROM(
     SELECT 
     *, 
     MAX(IF(hits.customDimensions.index=20,hits.customDimensions.value,NULL)) WITHIN hits as locked, 
     FROM 
     TABLE_DATE_RANGE([[dataset.ga_sessions_], TIMESTAMP('2017-06-01'), TIMESTAMP('2017-06-04')) 
    ) 
    WHERE 
     REGEXP_MATCH(hits.page.pagePath, '^/plus/.*/[0-9]') 
     AND totals.visits = 1 
     AND locked= '1' 
    GROUP BY 
     fullVisitorId, 
     visitId) s0 

Dieser den Fehler zurückgibt:
Fehler: nicht abfragen das Kreuzprodukt der wiederholten Felder customDimensions.index und hits.kunde. ; Kann das Kreuzprodukt der wiederholten Felder customDimensions.value und hits.unde nicht abfragen.

Wir haben gesehen, dass es einige Vorschläge gibt, auf Probleme mit dem oben genannten Fehler zu verwenden. Allerdings hat dies scheint Syntaxfehler zu geben:

FROM (
    SELECT 
     fullVisitorId, 
     visitId, 
     MIN(hits.hitNumber) AS firstHit, 
     MAX(IF(hits.isExit, 1, 0)) AS exit, 
     MAX(IF(hits.customDimensions.index=20,hits.customDimensions.value,NULL)) WITHIN hits AS locked 
    FROM 
     FLATTEN(TABLE_DATE_RANGE([[dataset.ga_sessions_], TIMESTAMP('2017-06-01'), TIMESTAMP('2017-06-04')),hits.customDimension) 
    WHERE 
     REGEXP_MATCH(hits.page.pagePath, '^/plus/.*/[0-9]') 
     AND totals.visits = 1 
     AND locked = '1' 
    GROUP BY 
     fullVisitorId, 
     visitId) s0 

gibt einfach den Fehler: Error: Not found: Table eb-bigquery:3917183.ga_sessions_
Also irgendwelche Vorschläge, wie wir die Filter bekommen würden zu arbeiten, sehr geschätzt werden.

+1

Ich frage mich nur, gibt es einen Grund, die [Standard] (https://cloud.google.com/bigquery/docs/reference/standard-sql/) Version von BQ nicht zu verwenden? –

+0

Das Skript, das wir verwenden, generiert den SQL-Aufruf in Legacy. – Sofu5

Antwort

2

BigQuery hat sich seit der Erstellung dieses Blogs stark weiterentwickelt und verfügt nun über fortschrittlichere Techniken zur Verarbeitung von Daten.

Das ist der Hauptgrund, warum ich gefragt habe, ob Sie die Standardversion von BigQuery verwenden könnten, da das Lösen dort einfacher wäre. Zum Beispiel:

SELECT 
    fullvisitorid, 
    visitid, 
    (select min(hitNumber) from unnest(hits) where regexp_contains(page.pagePath, r'^/plus/.*/[0-9]')) firstHit, 
    (select max(isExit) from UNNEST(hits) where regexp_contains(page.pagePath, r'^/plus/.*/[0-9]')) exitFlag 
FROM `table` 
WHERE 1 = 1 
    AND EXISTS(select 1 from unnest(hits) where regexp_contains(page.pagePath, r'^/plus/.*/[0-9]')) 
AND EXISTS(select 1 from unnest(hits) hits where (select count(value) from unnest(hits.customDimensions) custd where index=20) > 0) 
AND totals.visits = 1 

Diese Abfrage macht die gleichen und läuft schneller als die Legacy-diejenigen, wie es zunächst alle wiederholten Felder vermeidet Auseinanderschieben und dann die Daten zu verarbeiten.

+0

Danke das scheint für mein hier veröffentlichtes Beispiel zu funktionieren. – Sofu5

+0

Nachstehende Frage, wie dies für einen Trichter für Google-BigQuery sein soll. Es gibt mehrere Seitenpfade, die wir betrachten möchten, und dann möchten wir, dass die Werte von diesen hinzugefügt und dann gezählt werden. Hier haben wir versucht, für jeden dieser Seitenpfade 'full outer join each' zu verwenden. Allerdings erhalten wir hier zwei Fehler: 'Fehler: UNNEST-Ausdruck referenziert Spaltentreffer, die weder gruppiert noch aggregiert sind bei [x: y]' und das 'SELECT' sollte in Klammern stehen. Irgendwelche Vorschläge - ich kann als neue Frage insgesamt posten. – Sofu5

+0

@ Sofu5 gerade habe ich Ihren Kommentar gesehen. Sieht so aus, als hättest du diese Frage schon gestellt :) –

Verwandte Themen