As colunas virtuais para expressões aceleram as consultas do mecanismo colunar que avaliam repetidamente as mesmas expressões, como filtros em atributos JSON. Esse recurso está disponível para o PostgreSQL 16 e versões mais recentes.
O mecanismo colunar pode materializar e armazenar em cache os resultados de expressões usadas com frequência. Ao pré-computar e armazenar esses resultados, o AlloyDB evita a análise e a avaliação repetidas das mesmas expressões em várias consultas. Esse processo melhora o desempenho da consulta e reduz o consumo de CPU, especialmente para cargas de trabalho analíticas em grandes conjuntos de dados.
Confira alguns casos de uso de colunas virtuais para expressões:
- Filtragem em atributos JSON:quando você filtra consultas com frequência com base em pares de chave-valor específicos em uma coluna JSON.
- Avaliação de expressões complexas:para consultas que envolvem expressões complexas ou que exigem muitos recursos de computação.
Quando você ativa a verificação de colunas virtuais para expressões, as consultas que usam o mecanismo colunar e contêm expressões usadas com frequência são otimizadas automaticamente. O mecanismo colunar atualiza automaticamente essas colunas virtuais quando atualiza as colunas de base.
Expressões compatíveis em colunas virtuais
O AlloyDB é compatível com os operadores -> e ->> em colunas JSON e JSONB na versão de pré-lançamento.
Antes de começar
Ativar o mecanismo colunar para o cluster do AlloyDB. Para mais informações, consulte Configurar o mecanismo colunar.
Identifique expressões usadas com frequência nas consultas do AlloyDB usando o Query Insights.
Adicione as colunas de base das expressões ao mecanismo colunar. Para mais informações, consulte Gerenciar manualmente o conteúdo do repositório de colunas.
Ativar colunas virtuais para expressões
O suporte a colunas virtuais para expressões é ativado por padrão (google_columnar_engine.enable_virtual_columns_scan=on). Se essa flag tiver sido desativada anteriormente, será possível ativá-la para uma instância usando o comando gcloud alloydb instances update.
Para usar a CLI gcloud, você pode instalar e inicializar a Google Cloud CLI ou usar o Cloud Shell.
gcloud alloydb instances update INSTANCE_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--database-flags="google_columnar_engine.enable_virtual_columns_scan=on"Substitua:
INSTANCE_ID: o ID da instância do AlloyDB.REGION_ID: a região da instância do AlloyDB.CLUSTER_ID: o ID do cluster da instância do AlloyDB.PROJECT_ID: o ID do projeto Google Cloud .
Para definir essa flag no nível da sessão, execute o seguinte:
SET google_columnar_engine.enable_virtual_columns_scan=on;
Adicionar colunas virtuais para expressões
Para adicionar expressões usadas com frequência ao mecanismo colunar, use o cliente psql para chamar a função google_columnar_engine_add. Essas expressões são preenchidas no mecanismo colunar como colunas, além das que já existem no banco de dados.
É possível especificar várias expressões como valores separados por vírgula.
SELECT google_columnar_engine_add(
relation => 'DB.SCHEMA.TABLE_NAME',
columns => 'COLUMN_NAME, COLUMN_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Substitua:
DB.SCHEMA: o esquema do banco de dados em que a tabela está armazenada.TABLE_NAME: o nome da tabela em que a coluna está armazenada.COLUMN_NAME: o nome das colunas que incluem as expressões.EXP1, EXP2, EXP3: uma lista separada por vírgulas de expressões. As expressões de extração JSON compatíveis são->e->>.Por exemplo, para adicionar expressões
user ->> 'email'euser ->> 'name'para a tabelaemployeeno esquemapublic, use a seguinte consulta:SELECT google_columnar_engine_add( relation => 'postgres.public.employee', expressions => '"user ->> ''email''", "user ->> ''name''"' );Sintaxe da expressão:
- Coloque todo o valor da expressão entre aspas simples, por exemplo,
expressions => 'EXP1,EXP2,EXP3'. - Separe várias expressões com vírgulas.
- Coloque cada expressão entre aspas duplas.
- Use aspas simples para fazer o escape de qualquer aspa simples em uma expressão.
Por exemplo, para adicionar a expressão
col -> 'level1'ecol -> 'level1' ->> 'level2', use o seguinte formato:expressions => '"col -> ''level1''", "col -> ''level1'' ->> ''level2''"'- Coloque todo o valor da expressão entre aspas simples, por exemplo,
Exemplo de colunas virtuais para expressões
Este exemplo demonstra como usar o recurso de colunas virtuais para expressões. Crie uma tabela users com uma coluna JSONB profile e
preencha-a com dados de amostra. Em seguida, com base na análise de consulta, adicione a
expressão profile ->> 'email' usada com frequência ao mecanismo colunar com a
função google_columnar_engine_add. Em seguida, o mecanismo colunar usa essa
expressão frequente para ajudar a otimizar as consultas subsequentes.
Para adicionar esse exemplo de expressão frequente ao mecanismo colunar, siga estas etapas:
No Google Cloud console, acesse a página Clusters.
Clique no nome do cluster na coluna Nome do recurso.
No painel de navegação, clique em AlloyDB Studio.
Para criar a tabela
userscom uma coluna JSONBprofile, execute o seguinte:CREATE TABLE users ( id int, username TEXT, profile JSONB );Para preencher a tabela
userscom dados de amostra, execute o seguinte: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 melhorar o desempenho da consulta que inclui a expressão usada com frequência, adicione a expressão
profile ->> 'email'ao mecanismo colunar:SELECT google_columnar_engine_add( relation => 'users', columns => 'username, profile', expressions => '"profile ->> ''email''"' );Desativar o recurso de colunas virtuais para expressões para estabelecer uma referência de desempenho, executar uma consulta que use a expressão frequente e observar o tempo que a consulta leva para ser concluída.
SET google_columnar_engine.enable_virtual_columns_scan=off; SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';Ative o recurso de colunas virtuais para expressões.
SET google_columnar_engine.enable_virtual_columns_scan=on;Execute novamente a consulta que usa a expressão frequente e observe o tempo que ela leva para ser concluída.
SELECT username FROM users WHERE profile->>'email' = 'user50000@example.com';
O ambiente de execução da consulta é mais rápido depois que você ativa as colunas virtuais para expressões.
Ver colunas virtuais para expressões
Para encontrar todas as expressões adicionadas a uma tabela específica, consulte a visualização g_columnar_virtual_columns:
SELECT * FROM g_columnar_virtual_columns;
A saída é semelhante à seguinte, em que o campo description mostra todas as expressões adicionadas para uma tabela (relação):
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
Remover colunas virtuais para expressões
Para remover uma expressão, chame a função google_columnar_engine_drop():
SELECT google_columnar_engine_drop(
relation => 'DB.SCHEMA.TABLE_NAME',
expressions => 'EXP1, EXP2, EXP3'
);
Substitua EXP1, EXP2, EXP3 por uma lista separada por vírgulas de expressões na tabela no mesmo formato usado ao adicionar expressões.