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

  1. Recebeu <time> há uma hora:

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

  1. Recebeu <time1> há uma hora:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Receba <time2> por uma hora e meia:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. Substitua <time1> e <time2> na seguinte consulta:

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