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
Rufen Sie den Wert für
<time>
vor einer Stunde ab:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
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:
Rufen Sie den Wert für
<time1>
vor einer Stunde ab:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
Rufen Sie den Wert für
<time2>
vor einer halben Stunde ab:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
Ersetzen Sie
<time1>
und<time2>
in der folgenden Abfrage:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]