Tabellen-Decorators in Legacy-SQL

Im Allgemeinen führt BigQuery bei der Ausführung einer Abfrage einen vollständigen Spaltenscan durch. Sie können Tabellen-Decorators in Legacy-SQL verwenden, um eine kosteneffizientere Abfrage eines Teils der Daten auszuführen. Tabellen-Decorators können immer dann verwendet werden, wenn eine Tabelle gelesen wird, z. B. beim Kopieren einer Tabelle, Exportieren einer Tabelle oder Auflisten von Tabellendaten mit tabledata.list.

Tabellen-Decorators unterstützen relative und absolute <time>-Werte. Relative Werte werden mit einer negativen Zahl und positive Werte mit einer positiven Zahl dargestellt. Beispiel: -3600000 gibt einen Wert vor einer Stunde in Millisekunden bezogen auf die aktuelle Zeit an. 3600000 gibt eine Stunde in Millisekunden nach dem 1.1.1970 an.

Zeit-Decorator

Zeit-Decorators (früher Snapshot-Decorators genannt) verweisen auf einen bestimmten Zeitpunkt auf die Verlaufsdaten einer Tabelle.

Syntax

@<time>
  • Referenziert Verlaufsdaten der Tabelle unter <time> in Millisekunden seit Epochzeit.
  • <time> muss innerhalb der letzten sieben Tage liegen und größer als oder gleich dem Erstellungszeitpunkt der Tabelle sein, aber kleiner als der Zeitpunkt des Löschens oder der Ablaufzeit der Tabelle.
  • @0 ist ein Sonderfall, der die ältesten Daten referenziert, die für die Tabelle verfügbar sind.

Zeit-Decorators werden auch außerhalb von Legacy-SQL verwendet. Sie können sie im Befehl bq cp verwenden, um gelöschte Tabellen wiederherzustellen, wenn das Löschen der Tabelle nicht länger als sieben Tage zurückliegt.

Beispiele

So rufen Sie die Verlaufsdaten für eine Tabelle von vor einer Stunde ab:

Beispiel für relativen Wert

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

Beispiel für absoluten Wert

  1. Rufen Sie den Wert für <time> vor einer Stunde ab:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Ersetzen Sie dann <time> in der folgenden Abfrage:

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

Bereichs-Decorator

Syntax

@<time1>-<time2>
  • Referenziert Tabellendaten, die zwischen <time1> und <time2> hinzugefügt wurden, in Millisekunden seit Epochzeit.
  • <time1> und <time2> müssen innerhalb der letzten sieben Tage liegen.
  • <time2> ist optional und entspricht standardmäßig „jetzt“.

Beispiele

Beispiele für relativen Wert

So rufen Sie Tabellendaten ab, die zwischen einer Stunde und einer halben Stunde zuvor hinzugefügt wurden:

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

So rufen Sie Daten aus den letzten zehn Minuten ab:

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

Beispiel für absoluten Wert

So rufen Sie Tabellendaten ab, die zwischen einer Stunde und einer halben Stunde zuvor hinzugefügt wurden:

  1. Rufen Sie den Wert für <time1> vor einer Stunde ab:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. Rufen Sie den Wert für <time2> vor einer halben Stunde ab:

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. Ersetzen Sie <time1> und <time2> in der folgenden Abfrage:

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