Gerenciar manualmente o conteúdo do repositório de colunas

É possível adicionar manualmente tabelas, visualizações materializadas, colunas e índices de vetor ao armazenamento de colunas para controlar quais dados o mecanismo colunar acelera. Use o gerenciamento manual quando precisar de controle granular sobre o conteúdo do repositório de colunas, em vez de depender da colunização automática para gerenciar as colunas automaticamente.

Gerenciar tabelas, visualizações materializadas e índices vetoriais

Com base na carga de trabalho, é possível adicionar manualmente colunas ao armazenamento de colunas ou remover algumas ou todas as colunas de uma tabela ou visualização materializada do armazenamento de colunas. A avaliação de consultas usa automaticamente os dados colunares armazenados para responder a consultas.

Da mesma forma, é possível adicionar manualmente índices de vetor HNSW ou ScaNN ao mecanismo colunar para acelerar a pesquisa vetorial. A aceleração do mecanismo colunar para índices HNSW está em disponibilidade geral (GA), enquanto a aceleração para índices ScaNN está em pré-lançamento. Isso permite pesquisas eficientes de vizinhos mais próximos em grandes conjuntos de dados de embeddings de vetor.

Ao escolher quais tabelas, visualizações materializadas e colunas adicionar ao armazenamento de colunas, considere o tamanho do armazenamento de colunas e o formato da carga de trabalho. Bons candidatos para seleção incluem tabelas ou visualizações grandes que são verificadas com frequência. Nessas tabelas ou visualizações, identifique todos os índices grandes não exclusivos usados pela carga de trabalho OLAP. É possível adicionar as colunas desses índices ao armazenamento de colunas e, possivelmente, descartar os índices, eliminando o custo de desempenho associado à manutenção deles na instância principal.

Use um dos seguintes métodos para gerenciar o conteúdo do mecanismo colunar:

Consulte Quais dados podem ser adicionados ao armazenamento de colunas para saber quais tipos e fontes de dados podem ser usados ao adicionar tabelas, colunas e visualizações materializadas ao armazenamento de colunas.

Antes de começar

  • Você precisa ter um destes papéis do IAM no Google Cloud projeto que está sendo usado:
    • roles/alloydb.admin (o papel predefinido do IAM de Admin do AlloyDB)
    • roles/owner (o papel básico do IAM de Proprietário)
    • roles/editor (o papel básico do IAM de Editor)

    Se você não tiver nenhum desses papéis, entre em contato com o Administrador da organização para solicitar o acesso.

Gerenciar o conteúdo do repositório de colunas atualizando as flags de banco de dados

É possível gerenciar o conteúdo do repositório de colunas manualmente atualizando a flag de banco de dados google_columnar_engine.relations. A flag tem um único valor que especifica todas as fontes de dados do armazenamento de colunas. Durante a reinicialização, as colunas especificadas nessa flag são preenchidas automaticamente no repositório de colunas.

É possível usar essa flag com a colunização automática. Se o mecanismo colunar tiver memória disponível depois de preencher as colunas especificadas pela flag google_columnar_engine.relations, a colunização automática vai adicionar mais colunas ao repositório, conforme necessário.

Para mais informações sobre como definir as flags de banco de dados de uma instância usando a Google Cloud CLI ou o console do Google Cloud , consulte Configurar as flags de banco de dados de uma instância.

Adicionar colunas usando flags

Para adicionar colunas ao armazenamento de colunas, defina a flag google_columnar_engine.relations de uma instância. Defina o valor como uma lista de itens separada por vírgulas, em que cada item especifica uma lista de colunas a serem incluídas de uma tabela específica, neste formato:

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)

Substitua:

  • DATABASE_NAME: o banco de dados que contém as colunas a serem adicionadas ao armazenamento de colunas.

  • SCHEMA_NAME: o esquema que identifica as tabelas ou as visualizações materializadas a serem adicionadas ao armazenamento de colunas, por exemplo, public.

  • TABLE_NAME: a tabela ou a visualização materializada que contém as colunas a serem adicionadas ao armazenamento de colunas.

  • COLUMN_LIST: uma lista separada por vírgulas das colunas a serem adicionadas ao armazenamento de colunas.

Para adicionar todas as colunas de uma tabela ou de uma visualização materializada, omita a lista de colunas:

DATABASE_NAME.SCHEMA_NAME.TABLE_NAME

Para mais informações sobre como definir as flags de banco de dados em uma instância, consulte Configurar as flags de banco de dados de uma instância.

Sintaxe da CLI gcloud ao usar google_columnar_engine.relations

Se você usar a Google Cloud CLI para definir a flag google_columnar_engine.relations, use a sintaxe de delimitador alternativo para separar as flags de banco de dados definidas. Isso ocorre porque a lista de colunas é separada por vírgulas, o que exige o uso de um caractere que não seja uma vírgula ao especificar sinalizações no mesmo argumento de linha de comando.

O exemplo a seguir demonstra o uso da CLI gcloud para adicionar duas colunas no esquema public ao armazenamento de colunas. O exemplo define uma flag separada para ativar o mecanismo colunar, porque o uso do comando gcloud alloydb instances update para definir qualquer flag de banco de dados também precisa definir todas as outras flags de banco de dados que você quer que tenham valores não padrão, mesmo que já estejam definidas.

gcloud alloydb instances update INSTANCE_NAME \
    --database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
    --region=REGION_ID \
    --cluster=CLUSTER_ID

Substitua:

  • INSTANCE_NAME: o nome da instância.
  • DATABASE_NAME: o banco de dados que contém as colunas a serem adicionadas ao armazenamento de colunas.
  • TABLE_NAME: o nome da tabela ou da visualização materializada.
  • COLUMN_1, COLUMN_2: as colunas a serem adicionadas ao armazenamento de colunas.
  • REGION_ID: a região da instância.
  • CLUSTER_ID: o ID do cluster.

Descartar colunas usando flags

Para remover colunas do armazenamento de colunas, defina um novo valor para a flag google_columnar_engine.relations descrita na seção anterior, deixando de fora as colunas que você quer remover.

Para remover todas as colunas do armazenamento de colunas, desative a flag google_columnar_engine.relations da instância.

Para mais informações sobre como definir flags de banco de dados em uma instância, consulte Configurar flags de banco de dados de uma instância.

Gerenciar o conteúdo do repositório de colunas usando funções SQL

É possível gerenciar o conteúdo do repositório de colunas manualmente usando funções SQL.

Estimar os requisitos de espaço do repositório de colunas

Execute a função SQL google_columnar_engine_estimate para estimar o espaço total necessário para uma relação no mecanismo colunar.

Cliente psql

SELECT google_columnar_engine_estimate(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);

Substitua:

  • TABLE_NAME: uma string que contém o nome da tabela ou da visualização materializada. Se a tabela ou a visualização estiver em um esquema diferente de público, especifique o nome do esquema, um ponto e o nome da tabela ou da visualização. Por exemplo, 'myschema.mytable'.
  • COLUMN_LIST: uma string que contém uma lista separada por vírgulas, que diferencia maiúsculas de minúsculas, dos nomes das colunas que você quer adicionar. Se você quiser adicionar todas as colunas da tabela ou da visualização materializada ao armazenamento de colunas, omita esse parâmetro.

Adicionar colunas usando funções SQL

Execute a função SQL google_columnar_engine_add para adicionar colunas ao repositório de colunas.

Esse método adiciona as colunas especificadas ao armazenamento de colunas e gerencia as colunas apenas no nó conectado. As novas colunas não são mantidas no armazenamento após as reinicializações da instância.

Esse método não altera a flag de banco de dados google_columnar_engine.relations. A colunização automática não considera as colunas adicionadas por essa função SQL.

Cliente psql

SELECT google_columnar_engine_add(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);

Substitua:

  • TABLE_NAME: uma string que contém o nome da tabela ou da visualização materializada. Se a tabela ou a visualização estiver em um esquema diferente de public, especifique o nome do esquema, um ponto e o nome da tabela ou da visualização. Por exemplo, 'myschema.mytable'.
  • COLUMN_LIST: uma string que contém uma lista separada por vírgulas, que diferencia maiúsculas de minúsculas, dos nomes das colunas que você quer adicionar. Se você quiser adicionar todas as colunas da tabela ou da visualização materializada ao armazenamento de colunas, omita esse parâmetro.

Remover colunas usando funções SQL

Execute a função SQL google_columnar_engine_drop da seguinte maneira:

Cliente psql

SELECT google_columnar_engine_drop(
    relation => 'TABLE_NAME',
    columns => 'COLUMN_LIST'
);

Substitua:

  • TABLE_NAME: uma string que contém o nome da tabela ou da visualização materializada. Se a tabela ou a visualização estiver em um esquema diferente de public, especifique o nome do esquema, um ponto e o nome da tabela ou da visualização. Por exemplo, 'myschema.mytable'.
  • COLUMN_LIST: uma string que contém uma lista separada por vírgulas, que diferencia maiúsculas de minúsculas, dos nomes das colunas que você quer remover. Se você quiser remover todas as colunas da tabela ou da visualização materializada do armazenamento de colunas, omita esse parâmetro.

É possível usar a função google_columnar_engine_drop para remover colunas adicionadas editando a flag de banco de dados google_columnar_engine.relations. No entanto, quando você faz isso, essas colunas são adicionadas de volta ao armazenamento colunar quando a instância é reiniciada.

Gerenciar índices vetoriais no mecanismo colunar

Para acelerar a busca vetorial, carregue índices vetoriais no cache de índice do mecanismo colunar. A aceleração do mecanismo colunar para índices HNSW está em disponibilidade geral (GA), enquanto a aceleração para índices ScaNN está em pré-lançamento.

Adicionar, remover e verificar índices vetoriais usando funções SQL

É possível adicionar, remover e verificar manualmente índices de vetor do cache de índice usando funções SQL. Adicionar um índice ao cache pode acelerar as consultas de pesquisa vetorial.

Adicionar um índice vetorial

Para adicionar um índice específico ao cache de índice do mecanismo colunar, use a seguinte função SQL:

SELECT google_columnar_engine_add_index(index => 'INDEX_NAME');

Substitua INDEX_NAME pelo nome do índice de vetor HNSW ou ScaNN que você quer adicionar ao cache de índice do mecanismo colunar.

Remover um índice vetorial

Para remover um índice vetorial específico do mecanismo colunar, use a seguinte função SQL:

SELECT google_columnar_engine_drop_index(index => 'INDEX_NAME');

Substitua INDEX_NAME pelo nome do índice de vetor que você quer remover.

Verificar o uso do mecanismo colunar

Para verificar se as verificações de índice vetorial usam o mecanismo colunar, execute o comando EXPLAIN ANALYZE com a opção COLUMNAR_ENGINE:

EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;

O comando retorna um plano de consulta semelhante ao seguinte:

Index Scan using t_ix3 on t t_1 (actual rows=100 loops=1)
      Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
      Limit: 100
      ScaNN Info: (... columnar engine nodes hit=6...)
      Columnar Engine ScaNN Info: (index found=true)

A presença de columnar engine nodes hit e Columnar Engine ScaNN Info: (index found=true) na saída confirma que o mecanismo colunar é usado para a consulta.

A seguir