Décorateurs de table en ancien SQL

En temps normal, BigQuery effectue une analyse complète des colonnes lors de l'exécution d'une requête. Vous pouvez utiliser des décorateurs de table en ancien SQL pour effectuer une requête plus économique sur un sous-ensemble de vos données. Cela est possible chaque fois qu'une table est lue, par exemple lorsque vous copiez une table, exportez une table ou répertoriez des données à l'aide de tabledata.list.

Les décorateurs de table acceptent les valeurs <time> relatives et absolues. Les valeurs relatives sont indiquées par un nombre négatif et les valeurs absolues par un nombre positif. Par exemple, -3600000 indique la dernière heure écoulée en millisecondes, par rapport à l'heure actuelle, et 3600000 indique une heure en millisecondes après le 01/01/1970.

Décorateurs temporels

Les décorateurs temporels (anciennement décorateurs d'instantanés) font référence aux données d'historique d'une table à un moment donné.

Syntaxe

@<time>
  • Renvoie les données d'historique d'une table à <time>, en millisecondes depuis l'époque.
  • La valeur de <time> doit être comprise dans les sept derniers jours et supérieure ou égale à l'heure de création de la table, mais inférieure à l'heure de suppression ou d'expiration de la table.
  • @0 est un cas particulier qui référence les données les plus anciennes disponibles pour la table.

Les décorateurs d'heure sont également utilisés en dehors de l'ancien SQL. Vous pouvez les utiliser dans la commande bq cp pour restaurer les tables supprimées](/bigquery/docs/managing-tables#undeletetable) dans les sept jours suivant la suppression de la table.

Examples

Pour obtenir les données d'historique d'une table d'il y a une heure :

Exemple de valeur relative

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

Exemple de valeur absolue

  1. Obtenez <time> pour la dernière heure écoulée :

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Remplacez ensuite <time> dans la requête suivante :

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

Décorateurs de plage

Syntaxe

@<time1>-<time2>
  • Renvoie les données de la table ajoutées entre <time1> et <time2>, en millisecondes depuis l'époque.
  • Les valeurs de <time1> et <time2> doivent être comprises dans les sept derniers jours.
  • La valeur de <time2> est facultative et utilise par défaut "maintenant".

Exemples

Exemples de valeurs relatives

Pour obtenir des données de table ajoutées entre la dernière heure et la dernière demi-heure écoulées :

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

Pour obtenir les données des 10 dernières minutes :

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

Exemple de valeur absolue

Pour obtenir des données de table ajoutées entre la dernière heure et la dernière demi-heure écoulées :

  1. Obtenez <time1> pour la dernière heure écoulée :

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Obtenez <time2> pour la dernière demi-heure écoulée :

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. Remplacez <time1> et <time2> dans la requête suivante :

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