Decoradores de tabla en SQL antiguo
Normalmente, BigQuery realiza un análisis completo de las columnas cuando ejecuta una consulta.
Puedes usar decoradores de tabla en SQL antiguo para hacer una consulta más rentable de un subconjunto de tus datos. Los decoradores de tablas se pueden usar siempre que se lea una tabla, como al copiarla, exportarla o enumerar datos con tabledata.list
.
Los decoradores de tablas admiten valores <time>
relativos y absolutos. Los valores relativos se indican con un número negativo y los valores absolutos, con un número positivo. Por ejemplo, -3600000
indica hace una hora en milisegundos, en relación con la hora actual; 3600000
indica una hora en milisegundos después del 1/1/1970.
Decoradores de tiempo
Los decoradores de tiempo (antes denominados decoradores de instantáneas) hacen referencia a los datos históricos de una tabla en un momento dado.
Sintaxis
@<time>
- Hace referencia al historial de datos de una tabla en
<time>
, en milisegundos desde el inicio del registro de tiempo. <time>
debe estar dentro de los últimos siete días y ser mayor o igual que la hora de creación de la tabla, pero menor que la hora de eliminación o caducidad de la tabla.@0
es un caso especial que hace referencia a los datos más antiguos disponibles en la tabla.
Los decoradores de tiempo también se usan fuera de SQL antiguo. Puedes usarlos en el comando bq cp
para restaurar tablas eliminadas en un plazo de siete días desde que se eliminaron.
Ejemplos
Para obtener el historial de datos de una tabla de hace una hora, sigue estos pasos:
Ejemplo de valor relativo
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]
Ejemplo de valor absoluto
Obtener
<time>
hace una hora:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
A continuación, sustituye
<time>
en la siguiente consulta:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
Decoradores de intervalos
Sintaxis
@<time1>-<time2>
- Datos de la tabla de referencias añadidos entre el
<time1>
y el<time2>
, en milisegundos desde la época. <time1>
y<time2>
deben estar dentro de los últimos siete días.<time2>
es opcional y su valor predeterminado es "now".
Ejemplos
Ejemplos de valores relativos
Para obtener los datos de la tabla que se añadieron entre hace una hora y media hora, sigue estos pasos:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]
Para obtener los datos de los últimos 10 minutos, sigue estos pasos:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]
Ejemplo de valor absoluto
Para obtener los datos de la tabla que se añadieron entre hace una hora y media hora, sigue estos pasos:
Obtener
<time1>
hace una hora:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
Obtener
<time2>
hace media hora:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
Sustituye
<time1>
y<time2>
en la siguiente consulta:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]