ScaNN
. También se proporcionan ejemplos de errores y correcciones recomendadas.
Lista de errores
A continuación, se muestra una lista de los errores que se generan cuando intentas crear un índice ScaNN
. Puedes inhabilitar la generación de estos errores y seguir generando el índice. Para obtener más información, consulta Cómo aplicar 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
Cuando 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.
Ejemplos de consultas que causan el error
Ejemplo 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');
Ejemplo de consulta B
truncate t1;
Solución recomendada
Asegúrate de que tu tabla se propague con vectores de incorporación antes de generar un índice ScaNN
.
ERROR: No se puede crear el índice de ScaNN
Mensaje de error
Cuando intentas generar un índice en una tabla con pocas filas propagadas, se produce el siguiente error:
Cannot create ScaNN index, error: INVALID_ARGUMENT: Number of row (5) must be
larger than (1000).
Ejemplo de consulta que causa 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');
Solución recomendada
Asegúrate de que tu tabla se propague con vectores de incorporación antes de generar un índice ScaNN
. Te recomendamos que la cantidad de filas de la tabla sea mayor que el valor definido en el parámetro num_leaves
.
ERROR: No se puede crear el índice ScaNN en la tabla de particiones superior.
Mensaje de error
Si creaste tablas particionadas a partir de una tabla superior, la creación de un índice ScaNN en la tabla superior 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.
Ejemplo de consulta que causa 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');
Solución recomendada
No puedes generar un índice ScaNN
en la tabla superior de una tabla particionada.
Debes generar los índices ScaNN
en la tabla particionada.
Aplica la creación de índices y suprime los errores
Puedes forzar a AlloyDB a generar un índice y suprimir errores. Antes de permitir la generación de índices con este método, ten en cuenta las siguientes implicaciones:
- Dado que el índice se entrena con menos datos o sin ellos, los centroides aprenden con cero datos, lo que genera una mala recuperación.
- Es posible que el rendimiento de escritura en la base de datos también sea lento.
Para forzar la generación de índices, completa lo siguiente:
Establece el parámetro
scann.allow_blocked_operations creation
a nivel de la 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;
Reemplaza lo siguiente:
USER_NAME
: Es el nombre del usuario al que deseas otorgar el privilegio.PASSWORD
: La contraseña del usuario