Decoratori di tabelle in SQL precedente

In genere, BigQuery esegue una scansione completa delle colonne quando esegue una query. Puoi utilizzare i decoratori di tabelle in SQL precedente per eseguire una query più conveniente su un sottoinsieme dei tuoi dati. I decoratori di tabelle possono essere utilizzati ogni volta che viene letta una tabella, ad esempio quando si copia una tabella, si esporta una tabella o si elencano i dati utilizzando tabledata.list.

I decoratori di tabelle supportano valori <time> relativi e assoluti. I valori relativi sono indicati da un numero negativo, mentre i valori assoluti sono indicati da un numero positivo. Ad esempio, -3600000 indica un'ora fa in millisecondi, rispetto all'ora corrente; 3600000 indica un'ora in millisecondi dopo il 1° gennaio 1970.

Decoratori di tempo

I decoratori temporali (precedentemente noti come decoratori di snapshot) fanno riferimento ai dati storici di una tabella in un determinato momento.

Sintassi

@<time>
  • Fa riferimento ai dati storici di una tabella in <time>, in millisecondi dall'epoca.
  • <time> deve essere compreso negli ultimi sette giorni e deve essere maggiore o uguale all'ora di creazione della tabella, ma inferiore all'ora di eliminazione o scadenza della tabella.
  • @0 è un caso speciale che fa riferimento ai dati più vecchi disponibili per la tabella.

I decoratori di tempo vengono utilizzati anche al di fuori di SQL precedente. Puoi utilizzarli nel comando bq cp per ripristinare le tabelle eliminate entro sette giorni dall'eliminazione della tabella.

Esempi

Per ottenere i dati storici di una tabella risalenti a un'ora fa:

Esempio di valore relativo

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]

Esempio di valore assoluto

  1. Ottieni <time> per un'ora fa:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Poi, sostituisci <time> nella seguente query:

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
    

Decoratori di intervalli

Sintassi

@<time1>-<time2>
  • Fa riferimento ai dati della tabella aggiunti tra <time1> e <time2>, in millisecondi dall'epoca.
  • <time1> e <time2> devono essere compresi negli ultimi sette giorni.
  • <time2> è facoltativo e il valore predefinito è "now".

Esempi

Esempi di valori relativi

Per ottenere i dati della tabella aggiunti tra un'ora e mezz'ora fa:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]

Per ottenere i dati degli ultimi 10 minuti:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]

Esempio di valore assoluto

Per ottenere i dati della tabella aggiunti tra un'ora e mezz'ora fa:

  1. Ottieni <time1> per un'ora fa:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Ottieni <time2> per mezz'ora fa:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. Sostituisci <time1> e <time2> nella seguente query:

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]