Decoratori delle tabelle nell'SQL precedente

Normalmente, BigQuery esegue una scansione completa delle colonne quando viene eseguita una query. Puoi utilizzare i decorator delle tabelle nell'SQL precedente per eseguire una query più conveniente su un sottoinsieme di dati. I decoratori delle tabelle possono essere utilizzati ogni volta che viene letta una tabella, ad esempio durante la copia, l'esportazione di una tabella o l'elenco dei dati utilizzando tabledata.list.

I decoratori della tabella 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, in relazione all'ora corrente; 3600000 indica un'ora in millisecondi dopo 1/1/1970.

Decoratori del 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.
  • Il valore <time> deve rientrare negli ultimi sette giorni ed essere superiore o uguale alla data/ora di creazione della tabella, ma inferiore alla data/ora di eliminazione o scadenza della tabella.
  • @0 è un caso speciale che fa riferimento ai dati meno recenti disponibili per la tabella.

I decoratori dell'ora vengono utilizzati anche al di fuori dell'SQL precedente. Puoi utilizzarle nel comando bq cp per ripristinare le tabelle eliminate](/bigquery/docs/managing-tables#undeletetable) entro sette giorni dall'eliminazione della tabella.

Esempi

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

Esempio di valore relativo

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

Esempio di valore assoluto

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

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

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

Decoratori di intervalli

Sintassi

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

Esempi

Esempi di valore relativo

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

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

Per recuperare i dati degli ultimi 10 minuti:

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

Esempio di valore assoluto

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

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

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Acquista <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]