2014-06-12 5 views
6

Sto cercando di utilizzare google bigquery per selezionare i dati dalle tabelle con un carattere jolly di data. Mi piacerebbe essere in grado di utilizzare la funzione TABLE_DATE_RANGE, ma ho bisogno di interrogare su un ampio intervallo di date (> 1 anno). In questo momento la mia domanda lavora per la pena di un anno di dati, ma nulla più ottengo:Utilizzo di TABLE_DATE_RANGE con più di 1 anno di tabelle

errore: Errore TABLE_DATE_RANGE: troppi giorni

#Fails 
SELECT 
    system_id, sample_date, e_pv_array 
FROM 
    (TABLE_DATE_RANGE(workspace.intervaldata, 
        TIMESTAMP('2009-03-01'), 
        TIMESTAMP('2010-03-04'))) 
WHERE 
    system_id = 20006 
    and e_pv_array is not null; 

#Works 
SELECT 
    system_id, sample_date, e_pv_array 
FROM 
    (TABLE_DATE_RANGE(workspace.intervaldata, 
        TIMESTAMP('2009-03-01'), 
        TIMESTAMP('2010-03-03'))) 
WHERE 
    system_id = 20006 
    and e_pv_array is not null; 

E 'solo una limitazione di BigQuery ? O esiste un modo per utilizzare i caratteri jolly della tabella con intervalli di date superiori a 1 anno?

risposta

5

Ho riscontrato problemi anche con TABLE_DATE_RANGE(). Ecco una possibile soluzione, supponendo che le tabelle sono di nome workspace.intervaldata20090303, ecc .:

SELECT 
system_id, sample_date, e_pv_array 
FROM 
TABLE_QUERY(workspace, "integer(regexp_extract(table_id, r'intervaldata([0-9]+)')) BETWEEN 20090301 and 20100304") 
WHERE 
system_id = 20006 
and e_pv_array is not null; 

Ho uno scenario simile (data tabelle partizionato) e sono in grado di eseguire le query vale la pena di dati utilizzando TABLE_QUERY oltre 2 anni() senza errori.