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 innerhalb von sieben Tagen nach dem Löschen der Tabelle wiederherzustellen(/bigquery/docs/managing-tables#undeletetable).

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]