2017-07-18 43 views
0

BigQuery中的數不正確,我用下面的查詢來獲取每日活躍用戶數:Android上的日活躍用戶在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 

`

的結果這個具體日期的查詢是534 users for Android and 142 users for IOS

但Firebase顯示,今天只有209個活躍的Android用戶。 這個數字是正確的,因爲我可以將它與來自Appsee的數據進行比較。 對於IOS,Firebase返回的數字與我在BigQuery中的查詢完全相同。

我的查詢出了什麼問題,我該如何解決這個問題?

我試圖寫在標準的SQL查詢,以及: `

#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 

` 但此查詢的結果是完全一樣前面提到的一個:534每天的用戶,而不是對於Android的209,正確的IOS號碼。

所以,我認爲問題在於我誤解了內部FB/BQ機制。

請幫我弄清楚問題的根源。

+1

部分原因是'COUNT(DISTINCT ...)'使用傳統SQL時只是一個近似值。 –

+0

Elliott指出,你也可以嘗試使用'EXACT_COUNT_DISTINCT'而不是'COUNT(DISTINCT)'。不過,是否有任何理由不使用標準版本的BQ? –

+0

對我而言,COUNT(DISTINCT)和EXACT_COUNT_DISTINCT的結果相同。 你是說「BQ的標準版」是什麼意思?標準SQL? 當我使用COUNT(DISTINCT)或EXACT_COUNT_DISTINCT時,我擁有與Firebase相同數量的IOS用戶。但是對於Android用戶來說,結果比FB中的要高2倍以上。 – Vlad

回答

0

進一步查詢返回的每日活躍用戶的正確數量爲兩個平臺:問題的

#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

我的第一個查詢給了我不正確的結果,因爲我沒有考慮到一個用戶可以打開幾次應用程序。 – Vlad