Decoradores de tabelas no SQL antigo
Normalmente, o BigQuery faz uma análise completa das colunas quando executa uma consulta.
Pode usar decoradores de tabelas no SQL antigo para executar uma consulta mais rentável de um subconjunto dos seus dados. Os decoradores de tabelas podem ser usados sempre que uma tabela é lida,
como quando copia uma tabela,
exporta uma tabela,
ou lista dados através de tabledata.list
.
Os decoradores de tabelas suportam valores <time>
relativos e absolutos. Os valores relativos são indicados por um número negativo e os valores absolutos são indicados por um número positivo. Por exemplo, -3600000
indica há uma hora em milissegundos, relativamente à hora atual; 3600000
indica uma hora em milissegundos após 01/01/1970.
Decoradores de tempo
Os decoradores de tempo (anteriormente conhecidos como decoradores de instantâneos) fazem referência aos dados históricos de uma tabela num determinado momento.
Sintaxe
@<time>
- Faz referência aos dados do histórico de uma tabela em
<time>
, em milissegundos desde o epoch. <time>
tem de estar nos últimos sete dias e ser igual ou superior à hora de criação da tabela, mas inferior à hora de eliminação ou validade da tabela.@0
é um caso especial que faz referência aos dados mais antigos disponíveis para a tabela.
Os decoradores de tempo também são usados fora do SQL antigo. Pode usá-los no comando bq cp
pararestaurar tabelas eliminadas no prazo de sete dias após a eliminação da tabela.
Exemplos
Para obter os dados do histórico de uma tabela há uma hora:
Exemplo de valor relativo
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]
Exemplo de valor absoluto
Recebeu
<time>
há uma hora:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
Em seguida, substitua
<time>
na seguinte consulta:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
Decoradores de intervalos
Sintaxe
@<time1>-<time2>
- Dados da tabela de referências adicionados entre
<time1>
e<time2>
, em milissegundos desde a época. <time1>
e<time2>
têm de estar dentro dos últimos sete dias.<time2>
é opcional e tem como predefinição "agora".
Exemplos
Exemplos de valores relativos
Para obter dados de tabelas adicionados entre uma hora e meia hora atrás:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]
Para obter dados dos últimos 10 minutos:
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]
Exemplo de valor absoluto
Para obter dados de tabelas adicionados entre uma hora e meia hora atrás:
Recebeu
<time1>
há uma hora:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
Receba
<time2>
por uma hora e meia:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
Substitua
<time1>
e<time2>
na seguinte consulta:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]