Partitions- und Clusterempfehlungen anwenden
In diesem Dokument wird gezeigt, wie Sie Partitions- und Clusterempfehlungen auf BigQuery-Tabellen anwenden.
Beschränkungen
Der Partitionierungs- und Clustering-Recommender unterstützt keine BigQuery-Tabellen mit Legacy-SQL. Beim Generieren einer Empfehlung schließt der Recommender alle Legacy-SQL-Abfragen in der Analyse aus. Darüber hinaus werden durch das Anwenden von Partitionsempfehlungen auf BigQuery-Tabellen mit Legacy-SQL alle Legacy-SQL-Workflows in dieser Tabelle beeinträchtigt.
Bevor Sie Partitionsempfehlungen anwenden, migrieren Sie Ihre Legacy-SQL-Workflows in Google SQL.
Der Partitionierungs- und Clustering-Recommender unterstützt keine Ressourcen, die in den folgenden Regionen gespeichert sind:
europe-central2
,europe-west8
,europe-west9
,europe-west12
,europe-north1
,europe-southwest1
us-east1
,us-east5
,us-south1
me-central1
,me-central2
,me-west1
australia-southeast2
southamerica-west1
Hinweise
- Achten Sie darauf, dass die Recommender API aktiviert ist.
- Prüfen Sie, ob Sie die erforderlichen IAM-Berechtigungen (Identity and Access Management) haben.
Clusterempfehlungen anwenden
Sie können Clusterempfehlungen anwenden, wenn Sie Cluster auf eine Kopie der ursprünglichen Tabelle anwenden, sie direkt auf die ursprüngliche Tabelle anwenden oder materialisierte Ansichten verwenden.
Clusterempfehlungen auf eine kopierte Tabelle anwenden
Wenn Sie Clusterempfehlungen auf eine BigQuery-Tabelle anwenden, können Sie zuerst die ursprüngliche Tabelle kopieren und dann die Empfehlung auf die kopierte Tabelle anwenden. So wird sichergestellt, dass Ihre ursprünglichen Daten erhalten bleiben, wenn Sie ein Rollback der Änderung auf die Clustering-Konfiguration durchführen müssen.
Sie können diese Methode verwenden, um Clusterempfehlungen sowohl auf nicht partitionierte als auch auf partitionierte Tabellen anzuwenden.
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Erstellen Sie im Abfrageeditor mit dem
LIKE
-Operator eine leere Tabelle mit denselben Metadaten (einschließlich der Clustering-Spezifikationen) der ursprünglichen Tabelle:CREATE TABLE DATASET.COPIED_TABLE LIKE DATASET.ORIGINAL_TABLE
Dabei gilt:
DATASET
: der Name des Datasets, das die Tabelle enthält, z. B.mydataset
COPIED_TABLE
: der Name der kopierten Tabelle, z. B.copy_mytable
ORIGINAL_TABLE
: der Name der ursprünglichen Tabelle, z. B.mytable
Öffnen Sie in der Google Cloud Console den Cloud Shell-Editor.
Aktualisieren Sie im Cloud Shell-Editor die Clustering-Spezifikation der kopierten Tabelle mit dem empfohlenen Clustering. Verwenden Sie dazu den Befehl
bq update
:bq update --clustering_fields=CLUSTER_COLUMN DATASET.COPIED_TABLE
Ersetzen Sie
CLUSTER_COLUMN
durch die Spalte, die Sie clustern, z. B.mycolumn
.Sie können auch die API-Methode
tables.update
odertables.patch
aufrufen, um die Clustering-Spezifikation zu ändern.Rufen Sie im Abfrageeditor das Tabellenschema mit der Partitionierungs- und Clustering-Konfiguration der ursprünglichen Tabelle ab, sofern eine Partitionierung oder ein Clustering vorhanden ist. Sie können das Schema abrufen, wenn Sie die Ansicht
INFORMATION_SCHEMA.TABLES
der ursprünglichen Tabelle anzeigen:SELECT ddl FROM DATASET.INFORMATION_SCHEMA.TABLES WHERE table_name = 'DATASET.ORIGINAL_TABLE;'
Die Ausgabe ist die vollständige DDL-Anweisung (Datendefinitionssprache) von ORIGINAL_TABLE, einschließlich der Klausel
PARTITION BY
. Weitere Informationen zu den Argumenten in der DDL-Ausgabe finden Sie unterCREATE TABLE
-Anweisung.Die DDL-Ausgabe gibt den Partitionierungstyp in der ursprünglichen Tabelle an:
Partitionierungstyp Ausgabebeispiel Nicht partitioniert Die PARTITION BY
-Klausel fehlt.Nach Tabellenspalte partitioniert PARTITION BY c0
PARTITION BY DATE(c0)
PARTITION BY DATETIME_TRUNC(c0, MONTH)
Nach Aufnahmezeit partitioniert PARTITION BY _PARTITIONDATE
PARTITION BY DATETIME_TRUNC(_PARTITIONTIME, MONTH)
Daten in die kopierte Tabelle aufnehmen. Der verwendete Prozess basiert auf dem Partitionstyp.
- Wenn die ursprüngliche Tabelle nicht partitioniert oder durch eine Tabellenspalte partitioniert ist, nehmen Sie die Daten aus der ursprünglichen Tabelle in die kopierte Tabelle auf:
INSERT INTO DATASET.COPIED_TABLE SELECT * FROM DATASET.ORIGINAL_TABLE
Wenn die ursprüngliche Tabelle nach Aufnahmezeit partitioniert ist, gehen Sie so vor:
Rufen Sie die Liste der Spalten ab, um den Datenaufnahmeausdruck mithilfe der Ansicht
INFORMATION_SCHEMA.COLUMNS
zu bilden:SELECT ARRAY_TO_STRING(( SELECT ARRAY( SELECT column_name FROM DATASET.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'ORIGINAL_TABLE')), ", ")
Die Ausgabe ist eine durch Kommas getrennte Liste von Spaltennamen.
Nehmen Sie die Daten aus der ursprünglichen Tabelle in die Kopiertabelle auf:
INSERT DATASET.COPIED_TABLE (COLUMN_NAMES, _PARTITIONTIME) SELECT *, _PARTITIONTIME FROM DATASET.ORIGINAL_TABLE
Ersetzen Sie
COLUMN_NAMES
durch die durch Kommas getrennte Liste der Spalten, die im vorherigen Schritt ausgegeben wurde. Beispiel:col1, col2, col3
.
Sie haben jetzt eine geclusterte Tabelle mit denselben Daten wie die ursprüngliche Tabelle. In den nächsten Schritten ersetzen Sie die ursprüngliche Tabelle durch eine neu geclusterte Tabelle.
- Wenn die ursprüngliche Tabelle nicht partitioniert oder durch eine Tabellenspalte partitioniert ist, nehmen Sie die Daten aus der ursprünglichen Tabelle in die kopierte Tabelle auf:
Benennen Sie die ursprüngliche Tabelle in eine Sicherungstabelle um:
ALTER TABLE DATASET.ORIGINAL_TABLE RENAME TO DATASET.BACKUP_TABLE
Ersetzen Sie
BACKUP_TABLE
durch einen Namen für die Sicherungstabelle, z. B.backup_mytable
.Benennen Sie die kopierte Tabelle in die ursprüngliche Tabelle um:
ALTER TABLE DATASET.COPIED_TABLE RENAME TO DATASET.ORIGINAL_TABLE
Die ursprüngliche Tabelle wird jetzt gemäß der Clusterempfehlung geclustert.
- Zugriff und Berechtigungen, z. B. IAM-Berechtigungen, Zugriff auf Zeilenebene oder Zugriff auf Spaltenebene.
- Tabellenartefakte wie Tabellenklone, Tabellen-Snapshots oder Suchindexe.
- Der Status aller laufenden Tabellenprozesse, z. B. alle materialisierten Ansichten oder alle Jobs, die beim Kopieren der Tabelle ausgeführt wurden.
- Die Möglichkeit, mit Zeitreisen auf Verlaufsdaten aus Tabellen zuzugreifen.
- Alle Metadaten, die der ursprünglichen Tabelle zugeordnet sind, z. B.
table_option_list
odercolumn_option_list
. Weitere Informationen finden Sie unter Anweisungen der Datendefinitionssprache.
Wenn Probleme auftreten, müssen Sie die betroffenen Artefakte manuell in die neue Tabelle migrieren.
Nachdem Sie die geclusterte Tabelle geprüft haben, können Sie optional die Sicherungstabelle mit dem folgenden Befehl löschen:DROP TABLE DATASET.BACKUP_TABLE
Clusterempfehlungen direkt anwenden
Sie können Clusterempfehlungen direkt auf eine vorhandene BigQuery-Tabelle anwenden. Diese Methode ist schneller als das Anwenden von Empfehlungen auf eine kopierte Tabelle, aber eine Sicherungstabelle bleibt dabei nicht erhalten.
Führen Sie die folgenden Schritte aus, um eine neue Clustering-Spezifikation auf nicht partitionierte oder partitionierte Tabellen anzuwenden.
Aktualisieren Sie im bq-Tool die Clustering-Spezifikation Ihrer Tabelle, damit sie dem neuen Clustering entspricht:
bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE
Ersetzen Sie Folgendes:
CLUSTER_COLUMN
: die Spalte, nach der Sie Cluster gruppieren, z. B.mycolumn
DATASET
: der Name des Datasets, das die Tabelle enthält, z. B.mydataset
ORIGINAL_TABLE
: der Name der ursprünglichen Tabelle, z. B.mytable
Sie können auch die API-Methode
tables.update
odertables.patch
aufrufen, um die Clustering-Spezifikation zu ändern.Führen Sie die folgende
UPDATE
-Anweisung aus, um alle Zeilen gemäß der neuen Clustering-Spezifikation zu clustern:UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true
Clusterempfehlungen mit materialisierten Ansichten anwenden
Sie können eine materialisierte Ansicht der Tabelle erstellen, um Daten aus der ursprünglichen Tabelle mit der angewendeten Empfehlung zu speichern. Durch die Verwendung von materialisierten Ansichten zur Anwendung von Empfehlungen wird sichergestellt, dass die geclusterten Daten mithilfe von automatischen Aktualisierungen auf dem neuesten Stand bleiben. Beim Abfragen, Verwalten und Speichern von materialisierten Ansichten gibt es Überlegungen zur Preisgestaltung. Geclusterte materialisierte Ansichten erstellen.Partitionsempfehlungen anwenden
Sie können Partitionsempfehlungen anwenden, wenn Sie Partitionen auf eine Kopie der ursprünglichen Tabelle anwenden.
Partitionsempfehlungen auf eine kopierte Tabelle anwenden
Wenn Sie Partitionsempfehlungen auf eine BigQuery-Tabelle anwenden, können Sie zuerst die ursprüngliche Tabelle kopieren und dann die Empfehlung auf die kopierte Tabelle anwenden. So werden die ursprünglichen Daten beibehalten, falls Sie eine Partition zurücksetzen müssen.
Das folgende Verfahren verwendet eine Beispielempfehlung, um eine Tabelle nach der Partitionszeiteinheit DAY
zu partitionieren.
Erstellen Sie eine kopierte Tabelle mit den Partitionsempfehlungen:
CREATE TABLE DATASET.COPIED_TABLE PARTITION BY DATE_TRUNC(PARTITION_COLUMN, DAY) AS SELECT * FROM DATASET.ORIGINAL_TABLE
Ersetzen Sie Folgendes:
DATASET
: der Name des Datasets, das die Tabelle enthält, z. B.mydataset
COPIED_TABLE
: der Name der kopierten Tabelle, z. B.copy_mytable
PARTITION_COLUMN
: die Spalte, nach der Sie partitionieren, z. B.mycolumn
Weitere Informationen zum Erstellen von partitionierten Tabellen erhalten Sie unter Partitionierte Tabellen erstellen.
Benennen Sie die ursprüngliche Tabelle in eine Sicherungstabelle um:
ALTER TABLE DATASET.ORIGINAL_TABLE RENAME TO DATASET.BACKUP_TABLE
Ersetzen Sie
BACKUP_TABLE
durch einen Namen für die Sicherungstabelle, z. B.backup_mytable
.Benennen Sie die kopierte Tabelle in die ursprüngliche Tabelle um:
ALTER TABLE DATASET.COPIED_TABLE RENAME TO DATASET.ORIGINAL_TABLE
Die ursprüngliche Tabelle wird jetzt gemäß der Partitionsempfehlung partitioniert.
- Zugriff und Berechtigungen, z. B. IAM-Berechtigungen, Zugriff auf Zeilenebene oder Zugriff auf Spaltenebene.
- Tabellenartefakte wie Tabellenklone, Tabellen-Snapshots oder Suchindexe.
- Der Status aller laufenden Tabellenprozesse, z. B. alle materialisierten Ansichten oder alle Jobs, die beim Kopieren der Tabelle ausgeführt wurden.
- Die Möglichkeit, mit Zeitreisen auf Verlaufsdaten aus Tabellen zuzugreifen.
- Alle Metadaten, die der ursprünglichen Tabelle zugeordnet sind, z. B.
table_option_list
odercolumn_option_list
. Weitere Informationen finden Sie unter Anweisungen der Datendefinitionssprache. - Möglichkeit, Legacy-SQL zu verwenden, um Abfrageergebnisse in partitionierte Tabellen zu schreiben. Die Verwendung von Legacy-SQL wird in partitionierten Tabellen nicht vollständig unterstützt. Eine Lösung besteht darin, Ihre Legacy-SQL-Workflows zu Google SQL zu migrieren, bevor Sie eine Partitionsempfehlung anwenden.
Wenn Probleme auftreten, müssen Sie die betroffenen Artefakte manuell in die neue Tabelle migrieren.
Nachdem Sie die partitionierte Tabelle geprüft haben, können Sie optional die Sicherungstabelle mit dem folgenden Befehl löschen:DROP TABLE DATASET.BACKUP_TABLE
Preise
Wenn Sie eine Empfehlung auf eine Tabelle anwenden, können folgende Kosten anfallen:
- Verarbeitungskosten. Wenn Sie eine Empfehlung anwenden, führen Sie eine DDL-Abfrage (Datendefinitionssprache) oder eine DML-Abfrage (Datenbearbeitungssprache) für Ihr BigQuery-Projekt aus.
- Speicherkosten. Wenn Sie die Methode zum Kopieren einer Tabelle verwenden, verwenden Sie zusätzlichen Speicher für die kopierte (oder Sicherungs-)Tabelle.
Standardverarbeitungs- und Speichergebühren hängen vom Rechnungskonto ab, das dem Projekt zugeordnet ist. Weitere Informationen finden Sie unter BigQuery-Preise.