Soluciona problemas relacionados con errores del índice de ScaNN

Selecciona una versión de la documentación:

En este documento, se describen los errores que puedes encontrar cuando generas un índice de ScaNN. También se proporcionan ejemplos de errores y correcciones recomendadas.

No se puede crear un índice de ScaNN con una tabla vacía

Descripción

Cuando intentas generar un índice en una tabla sin datos o cuando intentas truncar una tabla con un índice de ScaNN generado en ella, se produce el siguiente error:

ERROR: Cannot create ScaNN index "[INDEX_NAME]" for table "[TABLE_NAME]", error: FAILED_PRECONDITION: Cannot create ScaNN index "[INDEX_NAME]" with empty table "[TABLE_NAME]". Once the table is populated with data, create the index. See documentation to bypass this validation.

Consultas de ejemplo 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;
    
  • Antes de generar un índice de ScaNN, asegúrate de que tu tabla esté propagada con vectores de incorporación.
  • Para crear un índice en una tabla sin datos, puedes habilitar la creación de índices diferida. Para obtener más información, consulta Crea un índice diferido para tablas vacías o casi vacías.

No se puede crear un índice de ScaNN

Descripción

Cuando intentas generar un índice en una tabla con pocas filas propagadas, se produce el siguiente error:

ERROR: Cannot create ScaNN index "[INDEX_NAME]" for table "[TABLE_NAME]", error: INVALID_ARGUMENT: Number of rows ([ACTUAL]) must be larger than ([EXPECTED]).

Consulta de ejemplo 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');
  • Antes de generar un índice de ScaNN, asegúrate de que tu tabla esté propagada con vectores de incorporación. La cantidad requerida de filas depende del modo de creación del índice:
    • Para el modo AUTO, recomendamos al menos 10,000 filas.
    • Para el modo MANUAL, recomendamos que la cantidad de filas de la tabla sea mayor que el valor definido en el parámetro num_leaves.
  • Para crear un índice en una tabla con una cantidad insuficiente de filas, puedes habilitar la creación de índices diferida. Para obtener más información, consulta Crea un índice diferido para tablas vacías o casi vacías.

No se puede crear un índice de ScaNN para una tabla con una sola fila

Descripción

Este error se produjo porque ScaNN (y la mayoría de los índices de ANN, como IVFFlat) necesitan un conjunto de entrenamiento para compilar sus estructuras internas (clústeres/hojas). Cuando insertas exactamente una fila , obtienes el siguiente error:

ERROR: Cannot create ScaNN index "[INDEX_NAME]" for table "[TABLE_NAME]", error: INVALID_ARGUMENT: Number of samples "[NUM_SAMPLES]" must be larger than 1 and the number of leaves "[NUM_LEAVES]"

Consulta de ejemplo 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, 1);
INSERT 0 1
create index on t1 using scann(b cosine) with (num_leaves = 1, quantizer = 'sq8');

Asegúrate de que tu tabla esté propagada con vectores de incorporación antes de generar un índice de ScaNN. Recomendamos que la cantidad de filas de la tabla sea la siguiente:

  • Mayor que 1
  • Mayor que el valor definido en el parámetro num_leaves

No se puede crear un índice de ScaNN ajustado automáticamente para una tabla con menos de 10,000 filas

Descripción

Este error se produce cuando intentas crear un índice de ScaNN ajustado automáticamente en una tabla que tiene menos de 10,000 filas. Cuando lo haces, recibes el siguiente error:

"ERROR: Cannot create ScaNN index "products_embedding_idx" for table "products", error: FAILED_PRECONDITION: Number of rows: 100 must be 10000 or more."

Consulta de ejemplo que causa el error

CREATE INDEX product_index ON product
USING scann (embedding cosine)

Asegúrate de que tu tabla tenga al menos 10,000 filas antes de intentar crear un índice de ScaNN ajustado automáticamente. Si necesitas anular este límite para fines de desarrollo o pruebas, consulta Forzar la creación de índices en tablas vacías o pequeñas.

No se puede crear un índice de ScaNN en la tabla de particiones superior

Descripción

Si creaste tablas particionadas a partir de una tabla superior, la creación de un índice de ScaNN en la tabla superior genera el siguiente error:

ERROR: Cannot create ScaNN index "[INDEX_NAME]" for parent partition table
"[TABLE_NAME]". Create ScaNN indexes on the child tables instead. See
documentation to bypass this validation.

Consulta de ejemplo 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');
  • No puedes generar un índice ScaNN en la tabla superior de una tabla particionada.
  • Debes generar los índices ScaNN en la tabla particionada.
  • Intenta omitir esta validación siguiendo los pasos que se indican en Crea un índice de ScaNN.