En esta página, se describe cómo usar columnas virtuales para expresiones en el motor de columnas para acelerar las consultas.
El motor de columnas puede materializar y almacenar en caché los resultados de las expresiones que se usan con frecuencia. Al calcular previamente y almacenar estos resultados, AlloyDB evita el análisis y la evaluación repetidos de las mismas expresiones en varias consultas. Este proceso mejora el rendimiento de las consultas y reduce el consumo de CPU, en especial para las cargas de trabajo analíticas en conjuntos de datos grandes.
Estos son algunos casos de uso de las columnas virtuales para expresiones:
- Filtrado en atributos JSON: Cuando filtras consultas con frecuencia en función de pares clave-valor específicos dentro de una columna JSON.
- Evaluación de expresiones complejas: Para consultas que involucran expresiones complejas o que requieren mucha capacidad de procesamiento.
Cuando habilitas el análisis de columnas virtuales para expresiones, las consultas que usan el motor de columnas y contienen expresiones que se usan con frecuencia se optimizan automáticamente. El motor de columnas actualiza automáticamente estas columnas virtuales cuando actualiza las columnas base.
Expresiones admitidas en columnas virtuales
AlloyDB admite operadores -> y ->> en columnas JSON y JSONB en la versión (vista previa).
Antes de comenzar
Habilita el motor de columnas para tu clúster de AlloyDB. Para obtener más información, consulta Configura el motor de columnas.
Identifica las expresiones que se usan con frecuencia en tus consultas de AlloyDB con las estadísticas de consultas.
Agrega las columnas base de las expresiones al motor de columnas. Para obtener más información, consulta Administra el contenido del almacén de columnas de forma manual.
Habilita las columnas virtuales para expresiones
Puedes habilitar la compatibilidad con columnas virtuales para expresiones para una instancia con el comando gcloud beta alloydb instances update.
Para usar gcloud CLI, puedes instalar y, luego, inicializar Google Cloud CLI o tú puedes usar Cloud Shell.
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"Reemplaza lo siguiente:
INSTANCE_ID: Es el ID de tu instancia de AlloyDB.REGION_ID: Es la región de tu instancia de AlloyDB.CLUSTER_ID: Es el ID del clúster de tu instancia de AlloyDB.PROJECT_ID: Es el ID del Google Cloud proyecto de.
Para configurar esta marca a nivel de la sesión, ejecuta lo siguiente:
SET google_columnar_engine.enable_virtual_columns_scan=on;
Agrega columnas virtuales para expresiones
Para agregar expresiones de uso común al motor de columnas, usa el cliente psql para llamar a la función google_columnar_engine_add. Estas expresiones se propagan al motor de columnas como columnas, además de las columnas que ya existen en la base de datos.
Puedes especificar varias expresiones como valores separados por comas.
SELECT google_columnar_engine_add(
relation => 'DB.SCHEMA.TABLE_NAME',
columns => 'COLUMN_NAME, COLUMN_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Reemplaza lo siguiente:
DB.SCHEMA: Es el esquema de la base de datos en el que se almacena tu tabla.TABLE_NAME: Es el nombre de la tabla en la que se almacena tu columna.COLUMN_NAME: Es el nombre de las columnas que incluyen las expresiones.EXP1, EXP2, EXP3por una lista de expresiones separadas por comas. Las expresiones de extracción de JSON compatibles son->y->>.Por ejemplo, para agregar expresiones
user ->> 'email'yuser ->> 'name'para la tablaemployeeen el esquemapublic, usa la siguiente consulta:SELECT google_columnar_engine_add( relation => 'postgres.public.employee', expressions => '"user ->> ''email''", "user ->> ''name''"' );Sintaxis de la expresión:
- Encierra todo el valor de la expresión entre comillas simples; por ejemplo,
expressions => 'EXP1,EXP2,EXP3'. - Separa varias expresiones con comas.
- Encierra cada expresión individual entre comillas dobles.
- Escapa cualquier comilla simple en una expresión con otra comilla simple.
Por ejemplo, para agregar la expresión
col -> 'level1'ycol -> 'level1' ->> 'level2', usa el siguiente formato:expressions => '"col -> ''level1''", "col -> ''level1'' ->> ''level2''"'- Encierra todo el valor de la expresión entre comillas simples; por ejemplo,
Ejemplo de columnas virtuales para expresiones
En este ejemplo, se muestra cómo usar la función de columnas virtuales para expresiones. Crea una tabla users con una columna JSONB profile y propágala con datos de muestra. Luego, según el análisis de consultas, agrega la
expresión profile ->> 'email'que se usa con frecuencia al motor de columnas con la
google_columnar_engine_addfunción. Luego, el motor de columnas usa esta expresión frecuente para ayudar a optimizar las consultas posteriores.
Para agregar esta expresión frecuente de ejemplo al motor de columnas, sigue estos pasos:
En la Google Cloud consola de, ve a la página Clústeres.
Haz clic en el nombre de tu clúster en la columna Nombre del recurso.
En el panel de navegación, haz clic en AlloyDB Studio.
Para crear la tabla
userscon una columna JSONBprofile, ejecuta lo siguiente:CREATE TABLE users ( id int, username TEXT, profile JSONB );Para propagar la tabla
userscon datos de muestra, ejecuta lo siguiente: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;Para mejorar el rendimiento de la consulta que incluye la expresión que se usa con frecuencia, agrega la expresión
profile ->> 'email'al motor de columnas:SELECT google_columnar_engine_add( relation => 'users', columns => 'username, profile', expressions => '"profile ->> ''email''"' );Ejecuta una consulta que use la expresión frecuente y observa el tiempo que tarda en completarse.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';Habilita la función de columnas virtuales para expresiones.
SET google_columnar_engine.enable_virtual_columns_scan=on;Vuelve a ejecutar la consulta que usa la expresión frecuente y observa el tiempo que tarda en completarse.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';
El tiempo de ejecución de la consulta es más rápido después de habilitar las columnas virtuales para expresiones.
Visualiza las columnas virtuales para expresiones
Para encontrar todas las expresiones agregadas para una tabla específica, consulta la vista g_columnar_virtual_columns:
SELECT * FROM g_columnar_virtual_columns;
El resultado es similar al siguiente, en el que el campo description muestra todas las expresiones agregadas para una tabla (relación).
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
Quita las columnas virtuales para expresiones
Para quitar una expresión, llama a la función google_columnar_engine_drop():
SELECT google_columnar_engine_drop(
relation => 'DB.SCHEMA.TABLE_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Reemplaza EXP1, EXP2, EXP3 por una lista de expresiones separadas por comas en la tabla con el mismo formato que se usó cuando se agregaron expresiones.