ScaNN
. Também são fornecidos exemplos de erros e correções recomendadas.
Lista de erros
Confira a seguir uma lista de erros gerados ao tentar criar um índice ScaNN
. É possível desativar a geração desses erros e continuar gerando
o índice. Para mais informações, consulte Impor a criação de índices e suprimir erros.
ERRO: não é possível criar um índice ScaNN com uma tabela vazia
Mensagem de erro
Quando você tenta gerar um índice em uma tabela sem dados ou truncar uma
tabela com um índice ScaNN
gerado nela, ocorre o seguinte erro:
ERROR: Cannot create ScaNN index with empty table. Once the table is populated
with data, create the index. See documentation to bypass this validation.
Exemplos de consultas que causam o erro
Exemplo de consulta A
create table t1 (a INT, b VECTOR(512)); CREATE TABLE create index on t1 using ScaNN(b cosine) with (num_leaves = 10, quantizer = 'sq8');
Exemplo de consulta B
truncate t1;
Correção recomendada
Verifique se a tabela está preenchida com vetores de incorporação antes de gerar um índice ScaNN
.
ERRO: não é possível criar um índice ScaNN
Mensagem de erro
Quando você tenta gerar um índice em uma tabela com poucas linhas preenchidas, ocorre o seguinte erro:
Cannot create ScaNN index, error: INVALID_ARGUMENT: Number of row (5) must be
larger than (1000).
Exemplo de consulta que causa o erro
create table t1 (a INT, b VECTOR(512));
CREATE TABLE
insert into t1 select (random()*1e9)::int, random_vector(512) from generate_series(1, 5);
INSERT 0 5
create index on t1 using scann(b cosine) with (num_leaves = 100, quantizer = 'sq8');
Correção recomendada
Verifique se a tabela está preenchida com vetores de incorporação antes de gerar um índice ScaNN
. Recomendamos que o número de linhas na tabela seja maior
do que o valor definido no parâmetro num_leaves
.
ERRO: não é possível criar um índice ScaNN na tabela de partição pai.
Mensagem de erro
Se você criou tabelas particionadas de uma tabela pai, a criação de um índice ScaNN na tabela mãe gera o seguinte erro:
ERROR: Cannot create ScaNN index on parent partition table. Create ScaNN
indexes on the child tables instead. See documentation to bypass this
validation.
Exemplo de consulta que causa o erro
create table t1 (a INT, b VECTOR(512)) partition by range(a);
CREATE TABLE
CREATE TABLE t1_one_ten PARTITION of t1 for values from (1) to (10);
CREATE TABLE
insert into t1_one_ten select (random()*1e9)::int, random_vector(512) from generate_series(1, 100);
INSERT 0 100
CREATE TABLE t1_eleven_twenty PARTITION of t1 for values from (11) to (20);
CREATE TABLE
insert into t1_eleven_twenty select (random()*1e9)::int, random_vector(512) from generate_series(1, 100);
INSERT 0 100
create index on t1 using scann(b cosine) with (num_leaves = 10, quantizer = 'sq8');
Correção recomendada
Não é possível gerar um índice ScaNN
na tabela pai de uma tabela particionada.
Você precisa gerar os índices ScaNN
na tabela particionada.
Aplicar a criação de índice e suprimir erros
Você pode forçar o AlloyDB a gerar um índice e suprimir erros. Antes de permitir a geração de índices com esse método, considere as seguintes implicações:
- Como o índice é treinado com menos dados ou sem dados, os centroides aprendem com zero dados, o que leva a uma recuperação ruim.
- A performance de gravação no banco de dados também pode ser lenta.
Para forçar a geração de índice, faça o seguinte:
Defina o parâmetro
scann.allow_blocked_operations creation
no nível da sessão comotrue
no banco de dados:SET scann.allow_blocked_operations = true;
Atribua o privilégio
SUPERUSER
ao usuário que vai executar essas consultas no banco de dados:CREATE USER USER_NAME WITH SUPERUSER PASSWORD PASSWORD;
Substitua:
USER_NAME
: o nome do usuário a quem você quer conceder o privilégio.PASSWORD
: a senha do usuário.