feat: add vec_subvector function (#5683)

* feat: add vec_subvector function

* change datatype of arg1 and arg2 from u64 to i64

* add sqlness test

* improve description comments
This commit is contained in:
Sicong Hu
2025-03-16 18:43:53 +08:00
committed by GitHub
parent dec439db2b
commit 09dacc8e9b
5 changed files with 329 additions and 1 deletions

View File

@@ -326,3 +326,53 @@ FROM (
| [7.0, 8.0, 9.0, 10.0] | 4 |
+-----------------------+------------+
SELECT vec_to_string(vec_subvector('[1.0,2.0,3.0,4.0,5.0]', 0, 3));
+-------------------------------------------------------------------------------+
| vec_to_string(vec_subvector(Utf8("[1.0,2.0,3.0,4.0,5.0]"),Int64(0),Int64(3))) |
+-------------------------------------------------------------------------------+
| [1,2,3] |
+-------------------------------------------------------------------------------+
SELECT vec_to_string(vec_subvector('[1.0,2.0,3.0,4.0,5.0]', 5, 5));
+-------------------------------------------------------------------------------+
| vec_to_string(vec_subvector(Utf8("[1.0,2.0,3.0,4.0,5.0]"),Int64(5),Int64(5))) |
+-------------------------------------------------------------------------------+
| [] |
+-------------------------------------------------------------------------------+
SELECT v, vec_to_string(vec_subvector(v, 3, 5))
FROM (
SELECT '[1.0, 2.0, 3.0, 4.0, 5.0]' AS v
UNION ALL
SELECT '[-1.0, -2.0, -3.0, -4.0, -5.0, -6.0]' AS v
UNION ALL
SELECT '[4.0, 5.0, 6.0, 10, -8, 100]' AS v
) ORDER BY v;
+--------------------------------------+---------------------------------------------------+
| v | vec_to_string(vec_subvector(v,Int64(3),Int64(5))) |
+--------------------------------------+---------------------------------------------------+
| [-1.0, -2.0, -3.0, -4.0, -5.0, -6.0] | [-4,-5] |
| [1.0, 2.0, 3.0, 4.0, 5.0] | [4,5] |
| [4.0, 5.0, 6.0, 10, -8, 100] | [10,-8] |
+--------------------------------------+---------------------------------------------------+
SELECT vec_to_string(vec_subvector(v, 0, 5))
FROM (
SELECT '[1.1, 2.2, 3.3, 4.4, 5.5]' AS v
UNION ALL
SELECT '[-1.1, -2.1, -3.1, -4.1, -5.1, -6.1]' AS v
UNION ALL
SELECT '[4.0, 5.0, 6.0, 10, -8, 100]' AS v
) ORDER BY v;
+---------------------------------------------------+
| vec_to_string(vec_subvector(v,Int64(0),Int64(5))) |
+---------------------------------------------------+
| [-1.1,-2.1,-3.1,-4.1,-5.1] |
| [1.1,2.2,3.3,4.4,5.5] |
| [4,5,6,10,-8] |
+---------------------------------------------------+

View File

@@ -99,3 +99,26 @@ FROM (
UNION ALL
SELECT '[7.0, 8.0, 9.0, 10.0]' AS v
) Order By vec_dim(v) ASC;
SELECT vec_to_string(vec_subvector('[1.0,2.0,3.0,4.0,5.0]', 0, 3));
SELECT vec_to_string(vec_subvector('[1.0,2.0,3.0,4.0,5.0]', 5, 5));
SELECT v, vec_to_string(vec_subvector(v, 3, 5))
FROM (
SELECT '[1.0, 2.0, 3.0, 4.0, 5.0]' AS v
UNION ALL
SELECT '[-1.0, -2.0, -3.0, -4.0, -5.0, -6.0]' AS v
UNION ALL
SELECT '[4.0, 5.0, 6.0, 10, -8, 100]' AS v
) ORDER BY v;
SELECT vec_to_string(vec_subvector(v, 0, 5))
FROM (
SELECT '[1.1, 2.2, 3.3, 4.4, 5.5]' AS v
UNION ALL
SELECT '[-1.1, -2.1, -3.1, -4.1, -5.1, -6.1]' AS v
UNION ALL
SELECT '[4.0, 5.0, 6.0, 10, -8, 100]' AS v
) ORDER BY v;