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.

Wenn Sie eine Tabelle wiederherstellen möchten, können Sie dafür innerhalb von sieben Tagen nach dem Löschen der Tabelle Zeit-Decorators verwenden.

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]
    

So stellen Sie eine Tabelle mit einem Zeit-Decorator und dem bq-Befehlszeilentool wieder her:

Beispiel für das Wiederherstellen einer Tabelle

Bestimmen Sie zuerst einen Zeitstempel für eine Zeit vor dem Löschen der Tabelle (in Millisekunden seit Epochzeit). Kopieren Sie die Tabelle dann mit diesem Zeitstempel in eine neue Tabelle. Die neue Tabelle muss einen anderen Namen als die gelöschte Tabelle haben.

# 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

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]