Auf dieser Seite wird beschrieben, wie Sie virtuelle Spalten für Ausdrücke in der spaltenbasierten Engine verwenden, um Abfragen zu beschleunigen.
Die spaltenbasierte Engine kann die Ergebnisse häufig verwendeter Ausdrücke materialisieren und im Cache speichern. Durch die Vorabberechnung und Speicherung dieser Ergebnisse vermeidet AlloyDB das wiederholte Parsen und Auswerten derselben Ausdrücke in mehreren Abfragen. Dieser Prozess verbessert die Abfrageleistung und reduziert die CPU-Auslastung, insbesondere bei analytischen Arbeitslasten für große Datensätze.
Einige Anwendungsfälle für virtuelle Spalten für Ausdrücke:
- Filtern nach JSON-Attributen:Wenn Sie Abfragen häufig nach bestimmten Schlüssel/Wert-Paaren in einer JSON-Spalte filtern.
- Komplexe Ausdrucksauswertung:Für Abfragen, die komplexe oder rechenintensive Ausdrücke enthalten.
Wenn Sie den Scan für virtuelle Spalten für Ausdrücke aktivieren, werden Abfragen, die die spaltenbasierte Engine verwenden und häufig verwendete Ausdrücke enthalten, automatisch optimiert. Die spaltenbasierte Engine aktualisiert diese virtuellen Spalten automatisch, wenn sie die Basisspalten aktualisiert.
Unterstützte Ausdrücke in virtuellen Spalten
AlloyDB unterstützt in der Version (Vorschau) die Operatoren -> und ->> für JSON- und JSONB-Spalten.
Hinweis
Aktivieren Sie die spaltenbasierte Engine für Ihren AlloyDB-Cluster. Weitere Informationen finden Sie unter Spaltenbasierte Engine konfigurieren.
Ermitteln Sie mit Query Insights häufig verwendete Ausdrücke in Ihren AlloyDB-Abfragen.
Fügen Sie die Basisspalten von Ausdrücken der spaltenbasierten Engine hinzu. Weitere Informationen finden Sie unter Spaltenspeicherinhalte manuell verwalten.
Virtuelle Spalten für Ausdrücke aktivieren
Sie können die Unterstützung für virtuelle Spalten für Ausdrücke für eine Instanz mit dem Befehl gcloud beta alloydb instances update aktivieren.
Wenn Sie die gcloud CLI verwenden möchten, können Sie die Google Cloud CLI installieren und initialisieren oder Sie können Cloud Shell verwenden.
gcloud beta alloydb instances update INSTANCE_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--update-mode=INPLACE \
--add-database-flags="google_columnar_engine.enable_virtual_columns_scan=on"Ersetzen Sie Folgendes:
INSTANCE_ID: Ihre AlloyDB-Instanz-ID.REGION_ID: die Region Ihrer AlloyDB-Instanz.CLUSTER_ID: die Cluster-ID Ihrer AlloyDB-Instanz.PROJECT_ID: Ihre Google Cloud Projekt-ID.
Führen Sie Folgendes aus, um dieses Flag auf Sitzungsebene festzulegen:
SET google_columnar_engine.enable_virtual_columns_scan=on;
Virtuelle Spalten für Ausdrücke hinzufügen
Wenn Sie häufig verwendete Ausdrücke der spaltenbasierten Engine hinzufügen möchten, rufen Sie mit dem psql-Client die Funktion google_columnar_engine_add auf. Diese Ausdrücke werden zusätzlich zu den bereits in der Datenbank vorhandenen Spalten als Spalten in die spaltenbasierte Engine eingefügt.
Sie können mehrere Ausdrücke als durch Kommas getrennte Werte angeben.
SELECT google_columnar_engine_add(
relation => 'DB.SCHEMA.TABLE_NAME',
columns => 'COLUMN_NAME, COLUMN_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Ersetzen Sie Folgendes:
DB.SCHEMA: das Datenbankschema, in dem Ihre Tabelle gespeichert ist.TABLE_NAME: der Name der Tabelle, in der Ihre Spalte gespeichert ist.COLUMN_NAME: der Name der Spalten, die die Ausdrücke enthalten.EXP1, EXP2, EXP3durch eine durch Kommas getrennte Liste von Ausdrücken. Die unterstützten JSON-Extrakt-Ausdrücke sind->und->>.Wenn Sie beispielsweise die Ausdrücke
user ->> 'email'unduser ->> 'name'für dieemployeeTabelle impublicSchema hinzufügen möchten, verwenden Sie die folgende Abfrage:SELECT google_columnar_engine_add( relation => 'postgres.public.employee', expressions => '"user ->> ''email''", "user ->> ''name''"' );Ausdruckssyntax :
- Setzen Sie den gesamten Ausdruckswert in einfache Anführungszeichen, z. B.
expressions => 'EXP1,EXP2,EXP3'. - Trennen Sie mehrere Ausdrücke durch Kommas.
- Setzen Sie jeden einzelnen Ausdruck in doppelte Anführungszeichen.
- Setzen Sie jedes einzelne Anführungszeichen in einem Ausdruck mit einem weiteren einzelnen Anführungszeichen in Escapezeichen.
Wenn Sie beispielsweise den Ausdruck
col -> 'level1'undcol -> 'level1' ->> 'level2'hinzufügen möchten, verwenden Sie das folgende Format:expressions => '"col -> ''level1''", "col -> ''level1'' ->> ''level2''"'- Setzen Sie den gesamten Ausdruckswert in einfache Anführungszeichen, z. B.
Beispiel für virtuelle Spalten für Ausdrücke
In diesem Beispiel wird die Verwendung der Funktion für virtuelle Spalten für Ausdrücke veranschaulicht. Erstellen Sie eine Tabelle users mit einer JSONB-Spalte profile und füllen Sie sie mit Beispieldaten. Fügen Sie dann basierend auf der Abfrageanalyse den
häufig verwendeten profile ->> 'email' Ausdruck mit der
google_columnar_engine_add Funktion der spaltenbasierten Engine hinzu. Die spaltenbasierte Engine verwendet diesen häufigen Ausdruck dann, um nachfolgende Abfragen zu optimieren.
So fügen Sie diesen häufig verwendeten Ausdruck der spaltenbasierten Engine hinzu:
Rufen Sie in der Google Cloud Console die Seite Cluster auf.
Klicken Sie in der Spalte Ressourcenname auf den Namen Ihres Clusters.
Klicken Sie im Navigationsbereich auf AlloyDB Studio.
Führen Sie Folgendes aus, um die Tabelle
usersmit einer JSONB-Spalteprofilezu erstellen:CREATE TABLE users ( id int, username TEXT, profile JSONB );Führen Sie Folgendes aus, um die Tabelle
usersmit Beispieldaten zu füllen:INSERT INTO users (id, username, profile) SELECT i, 'user' || i, jsonb_build_object( 'name', 'User ' || i, 'email', 'user' || i || '@example.com', 'active', (i % 2 = 0) ) FROM generate_series(1, 100000) AS i;Wenn Sie die Leistung der Abfrage verbessern möchten, die den häufig verwendeten Ausdruck enthält, fügen Sie der spaltenbasierten Engine den
profile ->> 'email'Ausdruck hinzu:SELECT google_columnar_engine_add( relation => 'users', columns => 'username, profile', expressions => '"profile ->> ''email''"' );Führen Sie eine Abfrage aus, die den häufig verwendeten Ausdruck verwendet, und beobachten Sie, wie lange die Abfrage dauert.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';Aktivieren Sie die Funktion für virtuelle Spalten für Ausdrücke.
SET google_columnar_engine.enable_virtual_columns_scan=on;Führen Sie die Abfrage, die den häufig verwendeten Ausdruck verwendet, noch einmal aus und beobachten Sie, wie lange die Abfrage dauert.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';
Die Abfragelaufzeit ist kürzer, nachdem Sie virtuelle Spalten für Ausdrücke aktiviert haben.
Virtuelle Spalten für Ausdrücke ansehen
Wenn Sie alle Ausdrücke finden möchten, die für eine bestimmte Tabelle hinzugefügt wurden, fragen Sie die Ansicht g_columnar_virtual_columns ab:
SELECT * FROM g_columnar_virtual_columns;
Die Ausgabe sieht in etwa so aus, wobei im Feld description alle Ausdrücke angezeigt werden, die für eine Tabelle (Relation) hinzugefügt wurden.
SELECT * FROM g_columnar_virtual_columns;
category | expression
database_name | testdb
schemas | {public}
relations | {users}
description | profile->>'email'
column_data_type | text
status | Usable
last_accessed_time | 2026-02-04 06:25:32.499601+00
num_times_accessed | 1
Virtuelle Spalten für Ausdrücke entfernen
Wenn Sie einen Ausdruck entfernen möchten, rufen Sie die Funktion google_columnar_engine_drop() auf:
SELECT google_columnar_engine_drop(
relation => 'DB.SCHEMA.TABLE_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Ersetzen Sie EXP1, EXP2, EXP3 durch eine durch Kommas getrennte Liste von Ausdrücken in der Tabelle im selben Format wie beim Hinzufügen von Ausdrücken.