Categorias:

Vector functions, Funções de agregação

VECTOR_AVG

Calcula a média elemento a elemento dos vetores :doc:` </user-guide/snowflake-cortex/vector-embeddings>` em um agregado. Retorna um vetor em que cada elemento é a média dos elementos correspondentes em todos os vetores de entrada. A saída é sempre VECTOR(FLOAT, N), independentemente do tipo de entrada.

Consulte também:

VECTOR_SUM , VECTOR_MIN , VECTOR_MAX , AVG, Incorporações de vetor

Sintaxe

VECTOR_AVG( <vector_column> )
Copy

Argumentos

vector_column

Uma coluna contendo valores VECTOR. Todos os vetores na coluna devem ter o mesmo tipo de elemento e dimensão.

Retornos

Retorna um valor VECTOR(FLOAT, N), em que N é a dimensão dos vetores de entrada. Cada elemento no vetor de resultado é a média dos elementos correspondentes em todos os vetores de entrada.

Notas de uso

  • Os valores NULL são ignorados na agregação.

  • Se todos os valores no grupo forem NULL, a função retornará NULL.

  • Todos os vetores de entrada na coluna devem ter o mesmo tipo de dimensão e elemento.

  • A saída é sempre VECTOR(FLOAT, N), independentemente do tipo de entrada. Para obter informações sobre números de ponto flutuante no Snowflake, consulte Tipos de dados de ponto flutuante.

  • As funções vetoriais são otimizadas de forma a reduzir a precisão do ponto flutuante. Os resultados dessa função têm uma margem de erro de até 1e-4.

Exemplos

Este exemplo demonstra o cálculo da média elemento a elemento de vetores:

CREATE OR REPLACE TABLE vector_data (
  id INT,
  category VARCHAR,
  embedding VECTOR(FLOAT, 3)
);

INSERT INTO vector_data
SELECT 1, 'A', [2.0, 4.0, 6.0]::VECTOR(FLOAT, 3)
UNION ALL SELECT 2, 'A', [4.0, 8.0, 12.0]::VECTOR(FLOAT, 3)
UNION ALL SELECT 3, 'B', [1.0, 2.0, 3.0]::VECTOR(FLOAT, 3)
UNION ALL SELECT 4, 'B', [3.0, 6.0, 9.0]::VECTOR(FLOAT, 3);

-- Compute average for each category
SELECT category, VECTOR_AVG(embedding) AS avg_vector
  FROM vector_data
  GROUP BY category
  ORDER BY category;
Copy
+----------+------------------+
| CATEGORY | AVG_VECTOR       |
+----------+------------------+
| A        | [3.0, 6.0, 9.0] |
| B        | [2.0, 4.0, 6.0] |
+----------+------------------+

Este exemplo mostra a agregação escalar (sem GROUP BY):

SELECT VECTOR_AVG(embedding) AS overall_avg
  FROM vector_data;
Copy
+------------------+
| OVERALL_AVG      |
+------------------+
| [2.5, 5.0, 7.5]  |
+------------------+

Este exemplo mostra como vetores inteiros são convertidos em saída de ponto flutuante:

CREATE OR REPLACE TABLE int_vector_data (
  id INT,
  vec VECTOR(INT, 2)
);

INSERT INTO int_vector_data
SELECT 1, [1, 3]::VECTOR(INT, 2)
UNION ALL SELECT 2, [2, 4]::VECTOR(INT, 2);

SELECT VECTOR_AVG(vec) AS avg_result
  FROM int_vector_data;
Copy
+-------------+
| AVG_RESULT  |
+-------------+
| [1.5, 3.5]  |
+-------------+