2016-04-21 57 views
1

我試圖從第一張表中獲取一些信息,然後將其鏈接到我擁有的一些人口統計信息。無法在bigquery中正確加入

SELECT 
    colA, 
    colB, 
    DATE(serverTimeStamp) AS newDate, 
    eventType, 
    pgSource, 
    COUNT(*) FROM (
    SELECT 
    *, 
    MAX(IF(LOWER(parameters.name)="pagesource", parameters.value, NULL)) WITHIN RECORD AS pgSource 
    FROM 
    TABLE_DATE_RANGE(mytableA, TIMESTAMP('2016-02-02 00:00:00'), TIMESTAMP('2016-02-02 23:59:59'))) 
WHERE 
    LOWER(parameters.name)="Allison" 
GROUP BY 
    parameters.name, 
    parameters.value, 
    newDate, 
    eventType, 
    pgSource 

但是,添加新表會更改我的結果(計數應該相同)。這是第一張有合適數據的結果。

SELECT 

    colA, 
    colB 
    DATE(serverTimeStamp) AS newDate, 
    eventType, 
    UD.gender, 
    UD.locationKey 
    pgSource, 

    COUNT(distinct instanceId) FROM (

    SELECT 
    *, 
    MAX(IF(LOWER(parameters.name)="Allison", parameters.value, NULL)) WITHIN RECORD AS pgSource 
    FROM 
    TABLE_DATE_RANGE(myTableA, TIMESTAMP('2016-02-02 00:00:00'), TIMESTAMP('2016-02-02 23:59:59'))) EV 

join each 
    replicated.UserDimension AS UD 
ON 
    UD.userId = EV.userId 


WHERE 
    LOWER(parameters.name)="isfirstcontact" 

GROUP EACH BY 
    colA, 
colB, 
    newDate, 
    eventType, 
    pgSource, 
    UD.gender, 
    UD.locationKey 

有關如何處理此問題的任何提示?

** 米哈伊爾已善意地提醒我說,第一臺具有多用戶id會甩開我的計數。我如何調整這個事實?

回答

1

任何提示?

只給你一個想法 - 運行,下面看看差別

SELECT 
    COUNT(*), 
    COUNT(1), 
    COUNT(instanceId), 
    COUNT(DISTINCT instanceId) 
FROM 
    (SELECT NULL AS instanceId), 
    (SELECT 1 AS instanceId), 
    (SELECT 2 AS instanceId), 
    (SELECT 1 AS instanceId), 

而且,我建議你COUNT([DISTINCT] ...)EXACT_COUNT_DISTINCT()

另一個方向之間檢查差異尋找到 - 請檢查您是否有DUP用戶id對任何一方(爲同一用戶id多行) - 這也可以是數量不匹配

+0

感謝米哈伊爾的源泉!我有重複的用戶ID - 有什麼辦法來調整這個事實時,計數? – TKL

+0

老實說,如果沒有第一張桌子上的細節和不理解你試圖做什麼的細節,很難提出更多建議。我建議檢查我的答案的第一部分 –

+0

我剛剛意識到 - 你的兩個查詢是完全不同的!查看帶有p​​arameters.name的條件的行!你期望在這裏有匹配的計數? –