Decoradores de tabela no SQL legado

Neste documento, detalhamos como usar decoradores de tabela na sintaxe de consulta do SQL legado. A sintaxe de consulta preferida do BigQuery é o SQL padrão. No momento, os decoradores de tabela não são compatíveis com o SQL padrão, mas é possível atingir a semântica correspondente no SQL padrão usando um filtro na pseudocoluna _TABLE_SUFFIX. Para mais informações, consulte Decoradores de tabela e funções de caractere curinga no guia de migração do SQL padrão.

Normalmente, o BigQuery realiza uma verificação completa de coluna ao executar uma consulta. Use decoradores de tabela no SQL legado para realizar uma consulta mais econômica de um subconjunto dos dados. É possível usar os decoradores sempre que uma tabela é lida, como ao copiar ou exportar uma tabela ou ao listar dados usando tabledata.list.

Os decoradores de tabela aceitam 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 uma hora atrás, em milissegundos, em relação à hora atual. 3600000 indica uma hora, em milissegundos, após 01/01/1970.

Decoradores de snapshot

Sintaxe

@<time>
  • Referencia um snapshot da tabela em <time>, em milissegundos, desde o período.
  • <time> precisa estar dentro dos últimos sete dias e ser maior ou igual ao horário de criação da tabela.
  • @0 é um caso especial que referencia o snapshot mais antigo possível da tabela: sete dias atrás ou a hora de criação da tabela, caso a tabela tenha menos de sete dias.
  • Os decoradores de snapshot são compatíveis apenas com operações de cópia de tabela. Para operações de consulta, use FOR SYSTEM_TIME AS OF.

É possível usar os decoradores de snapshot para cancelar a exclusão de uma tabela até sete dias após a exclusão.

Exemplos

Para conseguir um instantâneo da tabela há uma hora:

Exemplo de valor relativo

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

Exemplo de valor absoluto

  1. Veja <time> de uma hora atrás:

    #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]
    

Para cancelar a exclusão de uma tabela usando um decorador de snapshot e a ferramenta de linha de comando bq:

Exemplo de cancelamento de exclusão de tabela

Primeiro, determine um carimbo de data/hora anterior à exclusão da tabela (em milissegundos desde o período). Depois, copie a tabela desse carimbo para uma nova tabela. A nova tabela precisa ter um nome diferente da excluída.

# Create a table "dataset1.table1"
$ bq query --destination_table=dataset1.table1 "select 1"

# Get current timestamp
$ date +%s%3N
1573060348222

# Delete table1
$ bq rm dataset1.table1

# Undelete table
$ bq cp dataset1.table1@1573060348222 dataset1.table1_restore

Decoradores de intervalo

Sintaxe

@<time1>-<time2>
  • Referencia os dados da tabela adicionados entre <time1> e <time2>, em milissegundos, desde o período.
  • <time1> e <time2> precisam estar dentro dos últimos sete dias.
  • <time2> é opcional e o padrão é "agora".

Exemplos

Exemplos de valor relativo

Para ver os dados da tabela adicionados entre uma hora e meia hora atrás:

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

Para ver os dados dos últimos 10 minutos:

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

Exemplo de valor absoluto

Para ver os dados da tabela adicionados entre uma hora e meia hora atrás:

  1. Veja <time1> de uma hora atrás:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Receba <time2> de meia hora atrás:

    #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]