Tabellen-Snapshots mit einer geplanten Abfrage erstellen
In diesem Dokument wird beschrieben, wie Sie mit einem Dienstkonto, das eine geplante DDL-Abfrage ausführt, monatliche Snapshots einer Tabelle erstellen. Das Dokument führt Sie durch das folgende Beispiel:
- Erstellen Sie im Projekt
PROJECT
ein Dienstkonto mit dem Namensnapshot-bot
. - Gewähren Sie dem Dienstkonto
snapshot-bot
die Berechtigungen, die es zum Erstellen von Tabellen-Snapshots der TabelleTABLE
benötigt, die sich imDATASET
-Dataset befindet. Der Tabellen-Snapshot wird dann im DatasetBACKUP
gespeichert. - Schreiben Sie eine Abfrage, die monatliche Snapshots der Tabelle
TABLE
erstellt und sie im DatasetBACKUP
speichert. Da Sie einen vorhandenen Tabellen-Snapshot nicht überschreiben können, müssen die Tabellen-Snapshots eindeutige Namen haben. Dazu hängt die Abfrage das aktuelle Datum an die Namen der Tabellen-Snapshots an. Beispiel:TABLE_20220521
. Die Tabellen-Snapshots laufen nach 40 Tagen ab. - Planen Sie das Dienstkonto
snapshot-bot
so, dass die Abfrage am ersten Tag jedes Monats ausgeführt wird.
Dieses Dokument richtet sich an Nutzer, die mit BigQuery und BigQuery-Tabellen-Snapshots vertraut sind.
Berechtigungen und Rollen
In diesem Abschnitt werden die IAM-Berechtigungen (Identity and Access Management – Identitäts- und Zugriffsverwaltung) beschrieben, die Sie benötigen, um ein Dienstkonto zu erstellen und eine Abfrage zu planen, sowie die vordefinierten IAM-Rollen, die diese Berechtigungen gewähren.
Berechtigungen
Um mit einem Dienstkonto zu arbeiten, benötigen Sie die folgenden Berechtigungen:
Berechtigung | Ressource | Ressourcentyp |
---|---|---|
iam.serviceAccounts.*
|
PROJECT |
Projekt |
Zum Planen einer Abfrage benötigen Sie die folgenden Berechtigungen:
Berechtigung | Ressource | Ressourcentyp |
---|---|---|
bigquery.jobs.create
|
PROJECT |
Projekt |
Rollen
Die vordefinierten Rollen, die die erforderlichen Berechtigungen bereitstellen, um mit einem Dienstkonto zu arbeiten, sind:
Rolle | Ressource | Ressourcentyp |
---|---|---|
Beliebige von Folgendem:roles/iam.serviceAccountAdmin roles/editor roles/owner
|
PROJECT |
Projekt |
Folgende vordefinierte BigQuery-Rollen enthalten die Berechtigungen, die zum Planen einer Abfrage erforderlich sind:
Rolle | Ressource | Ressourcentyp |
---|---|---|
Beliebige von Folgendem:roles/bigquery.user roles/bigquery.jobuser roles/bigquery.admin
|
PROJECT |
Projekt |
Dienstkonto snapshot-bot
erstellen
Führen Sie die folgenden Schritte aus, um das Dienstkonto snapshot-bot
zu erstellen und ihm die Berechtigungen zuzuweisen, die zum Ausführen von Abfragen im Projekt PROJECT
erforderlich sind:
Console
Rufen Sie in der Cloud Console die Seite Dienstkonten auf.
Wählen Sie das Projekt
PROJECT
aus.Erstellen Sie das Dienstkonto
snapshot-bot
:Klicken Sie auf Dienstkonto erstellen.
Geben Sie im Feld Name des Dienstkontos snapshot-bot ein.
Klicken Sie auf Erstellen und fortfahren.
Gewähren Sie dem Dienstkonto die Berechtigungen, die zum Ausführen von BigQuery-Jobs erforderlich sind:
Wählen Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen die Rolle BigQuery-Nutzer aus.
Klicken Sie auf Fertig.
BigQuery erstellt das Dienstkonto mit der E-Mail-Adresse snapshot-bot@PROJECT.iam.gserviceaccount.com
.
So können Sie prüfen, ob BigQuery das Dienstkonto mit den von Ihnen angegebenen Berechtigungen erstellt hat:
Console
So prüfen Sie, ob BigQuery das Dienstkonto erstellt hat:
Rufen Sie in der Cloud Console die Seite Dienstkonten auf.
Wählen Sie das Projekt
PROJECT
aus.Klicken Sie auf snapshot-bot@PROJECT.iam.gserviceaccount.com.
Prüfen Sie, ob in der Meldung Dienstkontostatus angezeigt wird, dass Ihr Dienstkonto aktiv ist.
So prüfen Sie, ob BigQuery Ihrem Dienstkonto die Berechtigung erteilt hat, Abfragen auszuführen:
Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten:
Klicken Sie auf
PROJECT
.Klicken Sie auf Infofeld anzeigen.
Erweitern Sie auf dem Tab Berechtigungen den Knoten BigQuery-Nutzer.
Prüfen Sie, ob das Dienstkonto snapshot-bot aufgeführt wird.
Berechtigungen für das Dienstkonto gewähren
In diesem Abschnitt wird beschrieben, wie Sie dem Dienstkonto snapshot-bot
die Berechtigungen zum Erstellen von Tabellen-Snapshots der Tabelle DATASET.TABLE
im Dataset BACKUP
erteilen.
Berechtigung zum Erstellen von Snapshots der Basistabelle
So erteilen Sie dem Dienstkonto snapshot-bot
die Berechtigungen, die zum Erstellen von Snapshots der Tabelle DATASET.TABLE
erforderlich sind:
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Maximieren Sie im Bereich Explorer den Projektknoten
PROJECT
.Maximieren Sie den Dataset-Knoten DATASET.
Wählen Sie die Tabelle TABLE aus.
Klicken Sie auf Freigeben. Der Bereich Freigeben wird geöffnet.
Klicken Sie auf Hauptkonto hinzufügen. Der Bereich Zugriff erlauben wird geöffnet.
Geben Sie unter Neue Hauptkonten die E-Mail-Adresse des Dienstkontos ein: snapshot-bot@PROJECT.iam.gserviceaccount.com.
Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle BigQuery-Datenbearbeiter aus.
Klicken Sie auf Speichern.
Maximieren Sie im Bereich Freigeben den Knoten BigQuery-Datenbearbeiter und prüfen Sie, ob das Dienstkonto snapshot-bot@PROJECT.iam.gserviceaccount.com aufgeführt wird.
Klicken Sie auf Schließen.
bq
Aktivieren Sie Cloud Shell in der Cloud Console.
Geben Sie den folgenden Befehl
bq add-iam-policy-binding
ein:bq add-iam-policy-binding \ --member=serviceAccount:snapshot-bot@PROJECT.iam.gserviceaccount.com \ --role=roles/bigquery.dataEditor DATASET.TABLE
BigQuery bestätigt, dass die neue Richtlinienbindung hinzugefügt wurde.
Berechtigung zum Erstellen von Tabellen im Ziel-Dataset
So weisen Sie dem Dienstkonto snapshot-bot
die Berechtigungen zum Erstellen von Tabellen-Snapshots im Dataset BACKUP
zu:
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Maximieren Sie im Bereich Explorer den Projektknoten
PROJECT
.Klicken Sie auf das Menü für den Dataset-Knoten BACKUP und wählen Sie Öffnen aus.
Klicken Sie auf Share Dataset (Dataset freigeben). Der Bereich Dataset-Berechtigungen wird geöffnet.
Geben Sie im Feld Mitglieder hinzufügen die E-Mail-Adresse des Dienstkontos ein: snapshot-bot@PROJECT.iam.gserviceaccount.com.
Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle BigQuery-Datenbearbeiter aus.
Klicken Sie auf Hinzufügen.
Prüfen Sie im Bereich Dataset-Berechtigungen, ob das Dienstkonto snapshot-bot@PROJECT.iam.gserviceaccount.com unter dem Knoten BigQuery Dateninhaber aufgeführt wird.
Klicken Sie auf Fertig.
Ihr Dienstkonto snapshot-bot
hat jetzt die folgenden IAM-Rollen für die folgenden Ressourcen:
Rolle | Ressource | Ressourcentyp | Zweck |
---|---|---|---|
BigQuery-Dateneditor | PROJECT:DATASET.TABLE |
Tabelle | Snapshots der Tabelle TABLE erstellen. |
BigQuery-Dateninhaber | PROJECT:BACKUP |
Dataset | Erstellen und löschen Sie Tabellen-Snapshots im Dataset BACKUP . |
BigQuery-Nutzer | PROJECT |
Projekt | Geplante Abfrage zum Erstellen der Tabellen-Snapshots ausführen. |
Diese Rollen gewähren die Berechtigungen, die das Dienstkonto snapshot-bot
benötigt, um Abfragen auszuführen, mit denen Tabellen-Snapshots der Tabelle DATASET.TABLE
erstellt und die Tabellen-Snapshots im Dataset BACKUP
platziert werden.
Abfrage mit mehreren Anweisungen schreiben
In diesem Abschnitt wird beschrieben, wie Sie eine Abfrage mit mehreren Anweisungen schreiben, die einen Tabellen-Snapshot der Tabelle DATASET.TABLE
mithilfe der DDL-Anweisung CREATE SNAPSHOT TABLE
erstellt.
Der Snapshot wird im Dataset BACKUP
gespeichert und läuft nach einem Tag ab.
-- Declare variables
DECLARE snapshot_name STRING;
DECLARE expiration TIMESTAMP;
DECLARE query STRING;
-- Set variables
SET expiration = DATE_ADD(current_timestamp(), INTERVAL 1 DAY);
SET snapshot_name = CONCAT(
"BACKUP.TABLE_",
FORMAT_DATETIME('%Y%m%d', current_date()));
-- Construct the query to create the snapshot
SET query = CONCAT(
"CREATE SNAPSHOT TABLE ",
snapshot_name,
" CLONE mydataset.mytable OPTIONS(expiration_timestamp = TIMESTAMP '",
expiration,
"');");
-- Run the query
EXECUTE IMMEDIATE query;
Monatliche Abfrage planen
Planen Sie Ihre Abfrage so, dass sie um 5:00 Uhr morgens am ersten Tag jedes Monats so ausgeführt wird:
bq
Aktivieren Sie Cloud Shell in der Cloud Console.
Geben Sie den folgenden
bq query
-Befehl ein:bq query --use_legacy_sql=false --display_name="Monthly snapshots of the TABLE table" \ --location="us" --schedule="1 of month 05:00" \ --project_id=PROJECT \ 'DECLARE snapshot_name STRING; DECLARE expiration TIMESTAMP; DECLARE query STRING; SET expiration = DATE_ADD(@run_time, INTERVAL 40 DAY); SET snapshot_name = CONCAT("BACKUP.TABLE_", FORMAT_DATETIME("%Y%m%d", @run_date)); SET query = CONCAT("CREATE SNAPSHOT TABLE ", snapshot_name, " CLONE PROJECT.DATASET.TABLE OPTIONS(expiration_timestamp=TIMESTAMP \"", expiration, "\");"); EXECUTE IMMEDIATE query;'
BigQuery plant die Abfrage.
Die Abfrage mit mehreren Anweisungen im Befehl des bq-Befehlszeilentools unterscheidet sich von der Abfrage, die Sie in der Google Cloud Console ausgeführt haben:
- In der Abfrage des bq-Befehlszeilentools wird
@run_date
anstelle voncurrent_date()
verwendet. In einer geplanten Abfrage enthält der Parameter@run_date
das aktuelle Datum. In einer interaktiven Abfrage wird der Parameter@run_date
jedoch nicht unterstützt. Sie könnencurrent_date()
anstelle von@run_date
verwenden, um eine interaktive Abfrage zu testen, bevor Sie sie planen. - Die Abfrage des bq-Befehlszeilentools verwendet aus einem ähnlichen Grund
@run_time
anstelle voncurrent_timestamp()
. Der Parameter@run_time
wird in interaktiven Abfragen nicht unterstützt,current_timestamp()
kann jedoch statt@run_time
zum Testen der interaktiven Abfrage verwendet werden. - Die Abfrage des bq-Befehlszeilentools verwendet einen Schrägstrich und ein doppeltes Anführungszeichen
\"
anstelle eines einfachen Anführungszeichens'
, da einfache Anführungszeichen zum Umschließen der Abfrage verwendet werden.
Dienstkonto für die Ausführung der geplanten Abfrage konfigurieren
Die Abfrage wird derzeit mit Ihren Anmeldedaten ausgeführt.
Aktualisieren Sie Ihre geplante Abfrage so, dass sie mit den Anmeldedaten des Dienstkontos snapshot-bot
ausgeführt wird:
Führen Sie den Befehl
bq ls
aus, um die Identität des geplanten Abfragejobs abzurufen:bq ls --transfer_config=true --transfer_location=us
Die Ausgabe sieht dann ungefähr so aus:
name
displayName
dataSourceId
state
projects/12345/locations/us/transferConfigs/12345
Monthly snapshots of the TABLE table
scheduled_query
RUNNING
Führen Sie mit der ID im Feld
name
den folgendenbq update
-Befehl aus:bq update --transfer_config --update_credentials \ --service_account_name=snapshot-bot@PROJECT.iam.gserviceaccount.com \ projects/12345/locations/us/transferConfigs/12345
Cloud Shell bestätigt, dass die geplante Abfrage erfolgreich aktualisiert wurde.
Ergebnisse prüfen
In diesem Abschnitt wird beschrieben, wie Sie prüfen können, ob Ihre Abfrage ordnungsgemäß geplant wurde, ob beim Ausführen der Abfrage Fehler aufgetreten sind und wie die monatlichen Snapshots erstellt werden.
Geplante Abfrage ansehen
So können Sie prüfen, ob BigQuery die Abfrage für Ihre monatlichen Tabellen-Snapshots geplant hat:
Console
Rufen Sie in der Google Cloud Console die Seite Geplante Abfragen auf.
Klicken Sie auf Monatliche Snapshots der Tabelle TABLE.
Klicken Sie auf Konfiguration.
Prüfen Sie, ob der Abfragestring Ihre Abfrage enthält und ob die Abfrage am ersten Tag jedes Monats ausgeführt werden soll.
Ausführungsverlauf der geplanten Abfrage aufrufen
Nachdem die geplante Abfrage ausgeführt wurde, können Sie anhand der folgenden Informationen erkennen, ob sie erfolgreich war:
Console
Rufen Sie in der Google Cloud Console die Seite Geplante Abfragen auf.
Klicken Sie auf die Abfragebeschreibung Monatliche Snapshots der Tabelle TABLE.
Klicken Sie auf Ausführungsverlauf.
Sie erkennen am Datum und der Uhrzeit der Ausführung der Abfrage, ob die Ausführung erfolgreich war und falls nicht, welche Fehler aufgetreten sind. Wenn Sie weitere Details zu einer bestimmten Ausführung aufrufen möchten, klicken Sie auf die entsprechende Zeile in der Tabelle Ausführungsverlauf. Im Bereich Ausführungsdetails werden zusätzliche Details angezeigt.
Tabellen-Snapshots ansehen
So prüfen Sie, ob die Tabellen-Snapshots erstellt wurden:
Console
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Öffnen Sie im Explorer-Bereich das Dataset
BACKUP
und prüfen Sie, ob dieTABLE_YYYYMMDD
-Snapshots erstellt wurden, wobeiYYYYMMDD
der erste Tag jedes Monats ist.Beispiel:
TABLE_20220601
TABLE_20220701
TABLE_20220801
Nächste Schritte
- Weitere Informationen zu Tabellen-Snapshots finden Sie unter Mit Tabellen-Snapshots arbeiten.
- Weitere Informationen zum Planen von Abfragen finden Sie unter Abfragen planen.
- Weitere Informationen zu Google Cloud-Dienstkonten finden Sie unter Dienstkonten.