ScaNN
. También se proporcionan ejemplos de errores y correcciones recomendadas.
Lista de errores
A continuación, se muestra una lista de errores que se generan al intentar crear un índice ScaNN
. Puedes inhabilitar la generación de estos errores y seguir generando el índice. Para obtener más información, consulta Forzar la creación de índices y suprimir errores.
ERROR: No se puede crear un índice de ScaNN con una tabla vacía
Mensaje de error
Si intentas generar un índice en una tabla sin datos o truncar una tabla con un índice ScaNN
generado en ella, se produce el siguiente error:
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 ejemplo que provocan el error
Consulta de ejemplo 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');
Consulta de ejemplo B
truncate t1;
Corrección recomendada
Asegúrate de que la tabla contenga vectores de inserción antes de generar un índice ScaNN
.
ERROR: No se puede crear el índice de ScaNN
Mensaje de error
Si intentas generar un índice en una tabla con pocas filas, se produce el siguiente error:
Cannot create ScaNN index, error: INVALID_ARGUMENT: Number of row (5) must be
larger than (1000).
Consulta de ejemplo que provoca el error
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');
Corrección recomendada
Asegúrate de que la tabla contenga vectores de inserción antes de generar un índice ScaNN
. Recomendamos que el número de filas de la tabla sea mayor que el valor definido en el parámetro num_leaves
.
ERROR: No se puede crear un índice de ScaNN en la tabla de particiones principal.
Mensaje de error
Si ha creado tablas con particiones a partir de una tabla principal, al crear un índice ScaNN en la tabla principal se genera el siguiente error:
ERROR: Cannot create ScaNN index on parent partition table. Create ScaNN
indexes on the child tables instead. See documentation to bypass this
validation.
Consulta de ejemplo que provoca el error
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');
Corrección recomendada
No puedes generar un índice ScaNN
en la tabla principal de una tabla particionada.
Debes generar los índices de ScaNN
en la tabla con particiones.
Forzar la creación de índices y suprimir errores
Puedes obligar a AlloyDB a generar un índice y suprimir los errores. Antes de permitir la generación de índices con este método, ten en cuenta las siguientes implicaciones:
- Como el índice se entrena con pocos datos o con ninguno, los centroides aprenden con cero datos, lo que provoca un mal recuerdo.
- El rendimiento de escritura en la base de datos también puede ser lento.
Para forzar la generación del índice, haz lo siguiente:
Define el parámetro
scann.allow_blocked_operations creation
a nivel de sesión entrue
en la base de datos:SET scann.allow_blocked_operations = true;
Asigna el privilegio
SUPERUSER
al usuario que ejecutará estas consultas en la base de datos:CREATE USER USER_NAME WITH SUPERUSER PASSWORD PASSWORD;
Haz los cambios siguientes:
USER_NAME
: el nombre del usuario al que quieres conceder el privilegio.PASSWORD
: la contraseña del usuario.