En esta página, se describe cómo usar columnas virtuales para expresiones en el motor de columnas y acelerar las consultas.
El motor de columnas puede materializar y almacenar en caché los resultados de las expresiones que se usan con frecuencia. Al precalcular 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 según pares clave-valor específicos dentro de una columna JSON
- Evaluación de expresiones complejas: Para las búsquedas que involucran expresiones complejas o que requieren una gran cantidad de recursos de procesamiento.
Cuando habilitas las columnas virtuales para el análisis de 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 los operadores -> y ->> en las columnas JSON y JSONB en la versión de (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 columnar.
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 Cómo administrar el contenido del almacén de columnas de forma manual.
Habilita las columnas virtuales para las expresiones
Puedes habilitar la compatibilidad con columnas virtuales para expresiones en una instancia con el comando gcloud beta alloydb instances update.
Para usar gcloud CLI, puedes instalar y, luego, inicializar Google Cloud CLI, o bien 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 proyecto de Google Cloud .
Para establecer esta marca a nivel de la sesión, ejecuta el siguiente comando:
SET google_columnar_engine.enable_virtual_columns_scan=on;
Agrega columnas virtuales para expresiones
Para agregar expresiones de uso común al motor columnar, usa el cliente psql para llamar a la función google_columnar_engine_add. Estas expresiones se propagan en el motor de columnas como columnas, además de las 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, EXP3con una lista de expresiones separadas por comas. Las expresiones de JSON Extract admitidas 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.
- Para escapar cualquier comilla simple en una expresión, usa 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 profile JSONB y propágala con datos de muestra. Luego, según el análisis de la consulta, agrega la expresión profile ->> 'email' que se usa con frecuencia al motor de columnas con la función google_columnar_engine_add. Luego, el motor de columnas usa esta expresión frecuente para ayudar a optimizar las consultas posteriores.
Para agregar este ejemplo de expresión frecuente al motor columnar, sigue estos pasos:
En la consola de Google Cloud , 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 columnaprofileJSONB, ejecuta el siguiente comando:CREATE TABLE users ( id int, username TEXT, profile JSONB );Para completar la tabla
userscon datos de muestra, ejecuta el siguiente comando: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 las expresiones.
Cómo ver las columnas virtuales de las 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
Cómo quitar 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 separada por comas de expresiones en la tabla con el mismo formato que se usa cuando se agregan expresiones.