ScaNN
. Também são fornecidos exemplos de erros e correções recomendadas.
Lista de erros
Segue-se uma lista de erros gerados quando tenta criar um índice ScaNN
. Pode desativar a geração destes erros e continuar a gerar o índice. Para mais informações, consulte o artigo Aplique a criação de índices e suprima erros.
ERRO: não é possível criar um índice ScaNN com uma tabela vazia
Mensagem de erro
Quando tenta gerar um índice numa tabela sem dados ou tenta truncar uma tabela com um índice ScaNN
gerado na mesma, 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.
Consultas de exemplo 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
Certifique-se de que a tabela está preenchida com vetores de incorporação antes de gerar um índice ScaNN
.
ERRO: não é possível criar o índice ScaNN
Mensagem de erro
Quando tenta gerar um índice numa 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
Certifique-se de que 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 superior ao valor definido no parâmetro num_leaves
.
ERRO: não é possível criar o índice ScaNN na tabela de partição principal.
Mensagem de erro
Se tiver criado tabelas particionadas a partir de uma tabela principal, a criação de um índice ScaNN na tabela principal 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 pode gerar um índice ScaNN
na tabela principal de uma tabela particionada.
Tem de gerar os índices ScaNN
na tabela particionada.
Aplique a criação de índices e suprima erros
Pode aplicar o AlloyDB para gerar um índice e suprimir erros. Antes de permitir a geração de índices com este método, considere as seguintes implicações:
- Uma vez que o índice é preparado com poucos ou nenhuns dados, os centroides aprendem com zero dados, o que resulta numa má capacidade de memorização.
- O desempenho de gravação na base de dados também pode ser lento.
Para forçar a geração do índice, conclua o seguinte:
Defina o parâmetro ao nível da sessão
scann.allow_blocked_operations creation
comotrue
na base de dados:SET scann.allow_blocked_operations = true;
Atribua o privilégio
SUPERUSER
ao utilizador que vai executar estas consultas na base de dados:CREATE USER USER_NAME WITH SUPERUSER PASSWORD PASSWORD;
Substitua o seguinte:
USER_NAME
: o nome do utilizador ao qual quer conceder o privilégio.PASSWORD
: a palavra-passe do utilizador.