feat(vector): add conversion between vector and string (#5029)

* feat(vector): add conversion between vector and string

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* fix sqlness

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* address comments

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

---------

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>
This commit is contained in:
Zhenchi
2024-11-20 08:42:00 +00:00
committed by GitHub
parent 027284ed1b
commit 0aab68c23b
17 changed files with 655 additions and 169 deletions
@@ -0,0 +1,24 @@
SELECT vec_to_string(parse_vec('[1.0, 2.0]'));
+----------------------------------------------+
| vec_to_string(parse_vec(Utf8("[1.0, 2.0]"))) |
+----------------------------------------------+
| [1,2] |
+----------------------------------------------+
SELECT vec_to_string(parse_vec('[1.0, 2.0, 3.0]'));
+---------------------------------------------------+
| vec_to_string(parse_vec(Utf8("[1.0, 2.0, 3.0]"))) |
+---------------------------------------------------+
| [1,2,3] |
+---------------------------------------------------+
SELECT vec_to_string(parse_vec('[]'));
+--------------------------------------+
| vec_to_string(parse_vec(Utf8("[]"))) |
+--------------------------------------+
| [] |
+--------------------------------------+
@@ -0,0 +1,5 @@
SELECT vec_to_string(parse_vec('[1.0, 2.0]'));
SELECT vec_to_string(parse_vec('[1.0, 2.0, 3.0]'));
SELECT vec_to_string(parse_vec('[]'));
@@ -0,0 +1,96 @@
SELECT vec_cos_distance('[1.0, 2.0]', '[0.0, 0.0]');
+---------------------------------------------------------+
| vec_cos_distance(Utf8("[1.0, 2.0]"),Utf8("[0.0, 0.0]")) |
+---------------------------------------------------------+
| 1.0 |
+---------------------------------------------------------+
SELECT vec_cos_distance(parse_vec('[1.0, 2.0]'), '[0.0, 0.0]');
+--------------------------------------------------------------------+
| vec_cos_distance(parse_vec(Utf8("[1.0, 2.0]")),Utf8("[0.0, 0.0]")) |
+--------------------------------------------------------------------+
| 1.0 |
+--------------------------------------------------------------------+
SELECT vec_cos_distance('[1.0, 2.0]', parse_vec('[0.0, 0.0]'));
+--------------------------------------------------------------------+
| vec_cos_distance(Utf8("[1.0, 2.0]"),parse_vec(Utf8("[0.0, 0.0]"))) |
+--------------------------------------------------------------------+
| 1.0 |
+--------------------------------------------------------------------+
SELECT vec_cos_distance(parse_vec('[1.0, 2.0]'), parse_vec('[0.0, 0.0]'));
+-------------------------------------------------------------------------------+
| vec_cos_distance(parse_vec(Utf8("[1.0, 2.0]")),parse_vec(Utf8("[0.0, 0.0]"))) |
+-------------------------------------------------------------------------------+
| 1.0 |
+-------------------------------------------------------------------------------+
SELECT vec_l2sq_distance('[1.0, 2.0]', '[0.0, 0.0]');
+----------------------------------------------------------+
| vec_l2sq_distance(Utf8("[1.0, 2.0]"),Utf8("[0.0, 0.0]")) |
+----------------------------------------------------------+
| 5.0 |
+----------------------------------------------------------+
SELECT vec_l2sq_distance(parse_vec('[1.0, 2.0]'), '[0.0, 0.0]');
+---------------------------------------------------------------------+
| vec_l2sq_distance(parse_vec(Utf8("[1.0, 2.0]")),Utf8("[0.0, 0.0]")) |
+---------------------------------------------------------------------+
| 5.0 |
+---------------------------------------------------------------------+
SELECT vec_l2sq_distance('[1.0, 2.0]', parse_vec('[0.0, 0.0]'));
+---------------------------------------------------------------------+
| vec_l2sq_distance(Utf8("[1.0, 2.0]"),parse_vec(Utf8("[0.0, 0.0]"))) |
+---------------------------------------------------------------------+
| 5.0 |
+---------------------------------------------------------------------+
SELECT vec_l2sq_distance(parse_vec('[1.0, 2.0]'), parse_vec('[0.0, 0.0]'));
+--------------------------------------------------------------------------------+
| vec_l2sq_distance(parse_vec(Utf8("[1.0, 2.0]")),parse_vec(Utf8("[0.0, 0.0]"))) |
+--------------------------------------------------------------------------------+
| 5.0 |
+--------------------------------------------------------------------------------+
SELECT vec_dot_product('[1.0, 2.0]', '[0.0, 0.0]');
+--------------------------------------------------------+
| vec_dot_product(Utf8("[1.0, 2.0]"),Utf8("[0.0, 0.0]")) |
+--------------------------------------------------------+
| 0.0 |
+--------------------------------------------------------+
SELECT vec_dot_product(parse_vec('[1.0, 2.0]'), '[0.0, 0.0]');
+-------------------------------------------------------------------+
| vec_dot_product(parse_vec(Utf8("[1.0, 2.0]")),Utf8("[0.0, 0.0]")) |
+-------------------------------------------------------------------+
| 0.0 |
+-------------------------------------------------------------------+
SELECT vec_dot_product('[1.0, 2.0]', parse_vec('[0.0, 0.0]'));
+-------------------------------------------------------------------+
| vec_dot_product(Utf8("[1.0, 2.0]"),parse_vec(Utf8("[0.0, 0.0]"))) |
+-------------------------------------------------------------------+
| 0.0 |
+-------------------------------------------------------------------+
SELECT vec_dot_product(parse_vec('[1.0, 2.0]'), parse_vec('[0.0, 0.0]'));
+------------------------------------------------------------------------------+
| vec_dot_product(parse_vec(Utf8("[1.0, 2.0]")),parse_vec(Utf8("[0.0, 0.0]"))) |
+------------------------------------------------------------------------------+
| 0.0 |
+------------------------------------------------------------------------------+
@@ -0,0 +1,23 @@
SELECT vec_cos_distance('[1.0, 2.0]', '[0.0, 0.0]');
SELECT vec_cos_distance(parse_vec('[1.0, 2.0]'), '[0.0, 0.0]');
SELECT vec_cos_distance('[1.0, 2.0]', parse_vec('[0.0, 0.0]'));
SELECT vec_cos_distance(parse_vec('[1.0, 2.0]'), parse_vec('[0.0, 0.0]'));
SELECT vec_l2sq_distance('[1.0, 2.0]', '[0.0, 0.0]');
SELECT vec_l2sq_distance(parse_vec('[1.0, 2.0]'), '[0.0, 0.0]');
SELECT vec_l2sq_distance('[1.0, 2.0]', parse_vec('[0.0, 0.0]'));
SELECT vec_l2sq_distance(parse_vec('[1.0, 2.0]'), parse_vec('[0.0, 0.0]'));
SELECT vec_dot_product('[1.0, 2.0]', '[0.0, 0.0]');
SELECT vec_dot_product(parse_vec('[1.0, 2.0]'), '[0.0, 0.0]');
SELECT vec_dot_product('[1.0, 2.0]', parse_vec('[0.0, 0.0]'));
SELECT vec_dot_product(parse_vec('[1.0, 2.0]'), parse_vec('[0.0, 0.0]'));