我從BigQuery中得到一個錯誤,指出「JOIN表太大了,考慮使用JOIN EACH」,但是沒有任何顯式的聯接SQL語句。我看了另一個類似的問題,但我不明白他們給出的答案與我遇到的問題有關。「對於JOIN來說表格太大了,考慮使用JOIN EACH」但沒有聯接
'Too large to JOIN' error when I'm not using JOIN
這裏是SQL
SELECT
userId AS userId,
deviceId AS deviceId,
MAX(CASE WHEN event_parameters.Name = 'Result' THEN event_parameters.Value END) AS ResultValue,
MAX(CASE WHEN event_parameters.Name = 'Points' THEN event_parameters.Value END) AS _Points,
MAX(CASE WHEN event_parameters.Name = 'Time' THEN event_parameters.Value END) AS _Duration,
CASE WHEN event_name IN ('Level setA_lvl_01_onboarding Finished') THEN 1 WHEN event_name IN ('Level setA_lvl_02_onboarding Finished') THEN 2 WHEN event_name IN ('Level setA_lvl_03_onboarding Finished') THEN 3 WHEN event_name IN ('Level setA_lvl_04_onboarding Finished') THEN 4 WHEN event_name IN ('Level setA_lvl_05 Finished') THEN 5 WHEN event_name IN ('Level setA_lvl_06 Finished') THEN 6 WHEN event_name IN ('Level setA_lvl_07 Finished') THEN 7 WHEN event_name IN ('Level setB_lvl_01 Finished') THEN 8 WHEN event_name IN ('Level setB_lvl_02 Finished') THEN 9 WHEN event_name IN ('Level setB_lvl_03 Finished') THEN 10 WHEN event_name IN ('Level setB_lvl_04 Finished') THEN 11 WHEN event_name IN ('Level setB_lvl_05 Finished') THEN 12 WHEN event_name IN ('Level setC_lvl_01 Finished') THEN 13 WHEN event_name IN ('Level setC_lvl_02 Finished') THEN 14 WHEN event_name IN ('Level setC_lvl_03 Finished') THEN 15 WHEN event_name IN ('Level setC_lvl_04 Finished') THEN 16 WHEN event_name IN ('Level setC_lvl_05 Finished') THEN 17 WHEN event_name IN ('Level setA_lvl_08 Finished') THEN 18 WHEN event_name IN ('Level setA_lvl_09 Finished') THEN 19 WHEN event_name IN ('Level setA_lvl_10 Finished') THEN 20 WHEN event_name IN ('Level setA_lvl_11 Finished') THEN 21 WHEN event_name IN ('Level setA_lvl_12 Finished') THEN 22 WHEN event_name IN ('Level setA_lvl_13 Finished') THEN 23 WHEN event_name IN ('Level setA_lvl_14 Finished') THEN 24 WHEN event_name IN ('Level setB_lvl_06 Finished') THEN 25 WHEN event_name IN ('Level setB_lvl_07 Finished') THEN 26 WHEN event_name IN ('Level setB_lvl_08 Finished') THEN 27 WHEN event_name IN ('Level setB_lvl_09 Finished') THEN 28 WHEN event_name IN ('Level setB_lvl_10 Finished') THEN 29 WHEN event_name IN ('Level setB_lvl_11 Finished') THEN 30 WHEN event_name IN ('Level setC_lvl_06 Finished') THEN 31 WHEN event_name IN ('Level setC_lvl_07 Finished') THEN 32 WHEN event_name IN ('Level setC_lvl_08 Finished') THEN 33 WHEN event_name IN ('Level setC_lvl_09 Finished') THEN 34 WHEN event_name IN ('Level setC_lvl_10 Finished') THEN 35 WHEN event_name IN ('Level setC_lvl_11 Finished') THEN 36 WHEN event_name IN ('Level setC_lvl_12 Finished') THEN 37 WHEN event_name IN ('Level setA_lvl_15 Finished') THEN 38 WHEN event_name IN ('Level setA_lvl_16 Finished') THEN 39 WHEN event_name IN ('Level setA_lvl_17 Finished') THEN 40 WHEN event_name IN ('Level setA_lvl_18 Finished') THEN 41 WHEN event_name IN ('Level setA_lvl_19 Finished') THEN 42 WHEN event_name IN ('Level setA_lvl_20 Finished') THEN 43 WHEN event_name IN ('Level setA_lvl_21 Finished') THEN 44 WHEN event_name IN ('Level setB_lvl_12 Finished') THEN 45 WHEN event_name IN ('Level setB_lvl_13 Finished') THEN 46 WHEN event_name IN ('Level setB_lvl_14 Finished') THEN 47 WHEN event_name IN ('Level setB_lvl_15 Finished') THEN 48 WHEN event_name IN ('Level setB_lvl_16 Finished') THEN 49 WHEN event_name IN ('Level setB_lvl_17 Finished') THEN 50 WHEN event_name IN ('Level setB_lvl_18 Finished') THEN 51 WHEN event_name IN ('Level setC_lvl_13 Finished') THEN 52 WHEN event_name IN ('Level setC_lvl_14 Finished') THEN 53 WHEN event_name IN ('Level setC_lvl_15 Finished') THEN 54 WHEN event_name IN ('Level setC_lvl_16 Finished') THEN 55 WHEN event_name IN ('Level setC_lvl_17 Finished') THEN 56 WHEN event_name IN ('Level setC_lvl_18 Finished') THEN 57 WHEN event_name IN ('Level setC_lvl_19 Finished') THEN 58 WHEN event_name IN ('Level setC_lvl_20 Finished') THEN 59 ELSE 60 END AS _level,
FROM
TABLE_QUERY([dbset:dbname], "table_id CONTAINS 'game_table1' or table_id CONTAINS 'game_table2' or table_id CONTAINS 'game_table3'")
WHERE
event_name LIKE 'Level%Finished'
GROUP BY
userId,
deviceId
我懷疑問題是與「CASE WHEN EVENT_NAME IN」,作爲鏈接的問題表明,其中一個隱含的加入,所以我不知道如果在這裏也是這種情況,或者LIKE語句也可能成爲問題的一部分。
感謝, 布拉德
但是在上面的查詢中,IN不是半連接,因此令人費解的是爲什麼有關JOIN的錯誤出現了。失敗查詢的jobid是什麼? –
@Jordan如果問題在於JOIN操作太大,如何將JOY重寫爲JOIN幫助我? –
好點,mosha,我看到了IN,只是假設它是半連接。 –