2017-07-18 2 views
0

In BigQuery, verwende ich die folgende Abfrage die Anzahl der täglichen aktiven Nutzer zu erhalten:Falsche Anzahl der täglichen aktiven Nutzer auf Android in BigQuery

`

#legacySQL 
SELECT 
    user_dim.app_info.app_platform as appPlatform, 
    event_dim.date as eventDate, 
    COUNT(DISTINCT user_dim.app_info.app_instance_id) as daily_active_users 
FROM 
    TABLE_QUERY([table_name], 'table_id CONTAINS "app_events_"'), 
    TABLE_QUERY([table_name], 'table_id CONTAINS "app_events_"') 
GROUP BY 
    appPlatform, eventDate 
ORDER BY 
    appPlatform, eventDate 

`

Das Ergebnis Diese Abfrage für ein konkretes Datum ist 534 users for Android and 142 users for IOS.

Aber Firebase zeigt, dass es an diesem Tag nur 209 aktive Android-Nutzer gab. Und diese Nummer ist korrekt, weil ich sie mit Daten von Appsee vergleichen kann. Wie bei IOS gibt Firebase genau dieselbe Nummer wie meine Abfrage in BigQuery zurück.

Was ist falsch in meiner Abfrage und wie kann ich dieses Problem lösen?

Ich habe versucht, die Abfrage in SQL-Standard zu schreiben, aber auch: `

#standardSQL 
SELECT 
    event.date as date, 
    COUNT(DISTINCT user_dim.app_info.app_instance_id) AS daily_visitors 
FROM `table.table.app_events_*` 
CROSS JOIN UNNEST(event_dim) AS event 
GROUP BY date 
ORDER BY date DESC 

` Aber das Ergebnis dieser Abfrage ist absolut das gleiche wie die zuvor erwähnt: 534 Benutzer pro Tag statt von 209 für Android, korrekte Nummer für IOS.

Also, ich denke, dass das Problem in meinem Missverständnis der inneren FB/BQ-Mechanismen ist.

Bitte helfen Sie mir, die Wurzel des Problems herauszufinden.

+1

Ein Teil des Problems ist, dass COUNT (DISTINCT ...) 'ist nur eine Annäherung, wenn Legacy-SQL. –

+0

können Sie auch versuchen, 'EXACT_COUNT_DISTINCT' anstelle von' COUNT (DISTINCT) 'zu verwenden, wie Elliott darauf hingewiesen hat. Gibt es dennoch einen Grund, die Standardversion von BQ nicht zu verwenden? –

+0

COUNT (DISTINCT) und EXACT_COUNT_DISTINCT geben in meinem Fall die gleichen Ergebnisse. Was meinst du mit "Standard-Version von BQ" sagen? Standard SQL? Und ich habe genau die gleiche Anzahl von Benutzern für IOS wie Firebase zeigt mir, wenn ich COUNT (DISTINCT) oder EXACT_COUNT_DISTINCT. Aber für Android-Nutzer ist das Ergebnis mehr als 2 mal höher als das in FB. – Vlad

Antwort

0

Weitere Abfrage gibt korrekte Anzahl der täglich aktiven Nutzer für beide Plattformen:

#legacySQL 
SELECT 
    event_dim.date as eventDate, 
    CASE WHEN user_dim.app_info.app_platform = 'IOS' AND EXACT_COUNT_DISTINCT(user_dim.app_info.app_instance_id) !=0 THEN INTEGER(EXACT_COUNT_DISTINCT(user_dim.app_info.app_instance_id)) 
    ELSE 0 
    END as IOS_dau, 

    CASE WHEN user_dim.app_info.app_platform = 'ANDROID' AND EXACT_COUNT_DISTINCT(user_dim.app_info.app_instance_id) !=0 THEN INTEGER(EXACT_COUNT_DISTINCT(user_dim.app_info.app_instance_id)) 
    ELSE 0 
    END as ANDROID_dau, 

FROM 
    TABLE_QUERY([table:table_IOS], 'table_id CONTAINS "app_events_"'), 
    TABLE_QUERY([table:table_ANDROID], 'table_id CONTAINS "app_events_"') 
WHERE event_dim.name = 'user_engagement' 
GROUP BY 1, user_dim.app_info.app_platform 
ORDER BY 1 DESC 
+0

Meine erste Abfrage gab mir ein falsches Ergebnis, weil ich nicht berücksichtigt habe, dass ein Benutzer die App ein paar Mal öffnen kann. – Vlad

Verwandte Themen