2013-05-16 4 views
12

Sto tentando di eseguire una query unendo 2 insiemi di dati di grandi dimensioni e sto superando le risorse superate durante l'errore di esecuzione della query. Ho letto che ci sono dei problemi quando si utilizza Join Each e Group Each, ma non ciò che sarebbe una soluzione alternativa.Risorse superate durante l'esecuzione della query

SELECT 
    year(users.firstseen) as first_year, 
    month(users.firstseen) as first_month, 
    DATEDIFF(orders.timestamp,users.firstseen) as days_elapsed, 
    count(orders.user_key) as count_orders 
FROM 
    [project.orders] as orders 
JOIN EACH 
    [project.users] AS users 
ON 
    orders.user_key = users.user_key 
WHERE orders.store = 'ios' 
GROUP EACH BY 1,2,3 

Edit: le seguenti lavorato:

SELECT 
    year(users.firstseen) as firstyear, 
    month(users.firstseen) as firstmonth, 
    DATEDIFF(orders.timestamp, users.firstseen) as days_elapsed, 
    COUNT(users.firstseen) AS count_orders FROM [project.orders] as orders 
JOIN EACH(SELECT user_key, firstseen FROM [project.users] 
WHERE store_key = 'ios') as users ON orders.user_key = users.user_key 
GROUP BY firstyear, firstmonth, days_elapsed 
ORDER BY firstyear, firstmonth, days_elapsed 
+1

questo ha finito per lavorare SELEZIONA anno (users.firstseen) come firstyear, mese (users.firstseen) come firstmonth, DATEDIFF (orders.timestamp, users.firstseen) come days_elapsed, COUNT (users.firstseen) AS count_orders FROM [project.orders] come ordini ISCRIVITI EACH ( SELEZIONA user_key, firstseen dA [project.users] DOVE store_key = 'ios') come utenti ON orders.user_key = users.user_key GROUP BY firstyear, firstmonth, days_elapsed ORDER BY firstyear, firstmonth, days_elapsed – user2388120

risposta

12

ENTRA OGNI può fallire se il unirsi chiavi (in questo caso, user_key) sono distribuiti in modo non uniforme. Ad esempio, se hai una sola user_key che appare in modo anomalo spesso, riceverai un errore "risorse superate" dal nodo che gestisce quella chiave. In alternativa, è possibile provare a eseguire la query su un set più piccolo di chiavi utente filtrando alcune porzioni delle chiavi utente prima del join.

GROUP EACH BY può fallire se si dispone di troppe chiavi di gruppo distinte. Potresti provare a ridurre l'output del join aggiungendo alcune altre clausole WHERE per vedere se questo è il caso.

Fondamentalmente, consiglierei di ridurre gli input a JOIN EACH o GROUP EACH BY fino a quando la query non funzionerà, e quindi avrai un senso migliore per i limiti che stai incontrando . Una volta che lo sai, puoi (si spera) strutturare le tue query per ottenere il massimo dalle risorse disponibili.

(a proposito, ci aspettiamo di sintonizzare queste operazioni nel prossimo futuro per rimuovere alcuni dei limiti si può essere colpendo!)

+0

Sembra che avere un JOIN EACH che produce 0 corrispondenze innesca anche questo errore (testato su un join 2 milioni a sinistra, 180 milioni a destra). – moin

+0

Un JOIN EACH con zero match è improbabile che sia il colpevole da solo. Più probabilmente, c'è qualche altra clausola nella tua query prima o dopo il JOIN EACH che sta superando le risorse disponibili per un dato nodo di lavoro. Se invii un ID di lavoro a [email protected], posso dare un'occhiata più da vicino. –

+0

@JeremyCondit Avete un aggiornamento sui vincoli? –