Auf dieser Seite wird beschrieben, wie Sie virtuelle Spalten für Ausdrücke in der spaltenbasierten Engine verwenden, um Abfragen zu beschleunigen.
Die spaltenorientierte Engine kann die Ergebnisse häufig verwendeter Ausdrücke materialisieren und im Cache speichern. Durch die Vorberechnung 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 Datasets.
Hier sind 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.
- Auswertung komplexer Ausdrücke:für Abfragen mit komplexen oder rechenintensiven Ausdrücken.
Wenn Sie die virtuellen Spalten für den Ausdrucksscan 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 die Operatoren -> und ->> für JSON- und JSONB-Spalten in der Vorabversion.
Hinweise
Aktivieren Sie die spaltenbasierte Engine für Ihren AlloyDB-Cluster. Weitere Informationen finden Sie unter Spaltenbasierte Engine konfigurieren.
Mit Query Insights können Sie häufig verwendete Ausdrücke in Ihren AlloyDB-Abfragen ermitteln.
Fügen Sie der spaltenbasierten Engine die Basisspalten von Ausdrücken 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 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: Projekt-ID in Google Cloud .
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 in die spaltenorientierte Engine einfügen möchten, rufen Sie die Funktion google_columnar_engine_add mit dem psql-Client auf. Diese Ausdrücke werden als Spalten in die spaltenbasierte Engine eingefügt, zusätzlich zu den Spalten, die bereits in der Datenbank vorhanden sind.
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 ersetzen. Die unterstützten JSON-Extraktionsausdrücke sind->und->>.Wenn Sie beispielsweise der Tabelle
employeeim Schemapublicdie Ausdrückeuser ->> 'email'unduser ->> 'name'hinzufügen möchten, verwenden Sie die folgende Abfrage:SELECT google_columnar_engine_add( relation => 'postgres.public.employee', expressions => '"user ->> ''email''", "user ->> ''name''"' );Syntax für Ausdrücke:
- 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.
- Einfache Anführungszeichen in einem Ausdruck müssen mit einem weiteren einfachen Anführungszeichen maskiert werden.
Wenn Sie beispielsweise die Ausdrücke
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 gezeigt, wie Sie die Funktion für virtuelle Spalten für Ausdrücke verwenden. Erstellen Sie eine users-Tabelle mit einer profile-JSONB-Spalte und füllen Sie sie mit Beispieldaten. Fügen Sie dann basierend auf der Abfrageanalyse den häufig verwendeten profile ->> 'email'-Ausdruck mit der Funktion google_columnar_engine_add in die spaltenbasierte Engine ein. Die spaltenbasierte Engine verwendet diesen häufigen Ausdruck dann, um nachfolgende Abfragen zu optimieren.
So fügen Sie diesen häufigen Ausdruck der Spalten-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;Um die Leistung der Abfrage zu verbessern, die den häufig verwendeten Ausdruck enthält, fügen Sie den Ausdruck
profile ->> 'email'der spaltenbasierten Engine hinzu:SELECT google_columnar_engine_add( relation => 'users', columns => 'username, profile', expressions => '"profile ->> ''email''"' );Führen Sie eine Abfrage aus, in der der häufige Ausdruck verwendet wird, und beobachten Sie, wie lange die Ausführung 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, in der der häufige Ausdruck verwendet wird, noch einmal aus und beobachten Sie, wie lange es dauert, bis die Abfrage abgeschlossen ist.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';
Die Laufzeit der Abfrage 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 für eine bestimmte Tabelle abrufen möchten, fragen Sie die Ansicht g_columnar_virtual_columns ab:
SELECT * FROM g_columnar_virtual_columns;
Die Ausgabe sieht 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.