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("[]"))) | +--------------------------------------+ | [] | +--------------------------------------+ SELECT vec_to_string(vec_add('[1.0, 2.0]', '[3.0, 4.0]')); +---------------------------------------------------------------+ | vec_to_string(vec_add(Utf8("[1.0, 2.0]"),Utf8("[3.0, 4.0]"))) | +---------------------------------------------------------------+ | [4,6] | +---------------------------------------------------------------+ SELECT vec_to_string(vec_add(parse_vec('[1.0, 2.0]'), '[3.0, 4.0]')); +--------------------------------------------------------------------------+ | vec_to_string(vec_add(parse_vec(Utf8("[1.0, 2.0]")),Utf8("[3.0, 4.0]"))) | +--------------------------------------------------------------------------+ | [4,6] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_add('[1.0, 2.0]', parse_vec('[3.0, 4.0]'))); +--------------------------------------------------------------------------+ | vec_to_string(vec_add(Utf8("[1.0, 2.0]"),parse_vec(Utf8("[3.0, 4.0]")))) | +--------------------------------------------------------------------------+ | [4,6] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_mul('[1.0, 2.0]', '[3.0, 4.0]')); +---------------------------------------------------------------+ | vec_to_string(vec_mul(Utf8("[1.0, 2.0]"),Utf8("[3.0, 4.0]"))) | +---------------------------------------------------------------+ | [3,8] | +---------------------------------------------------------------+ SELECT vec_to_string(vec_mul(parse_vec('[1.0, 2.0]'), '[3.0, 4.0]')); +--------------------------------------------------------------------------+ | vec_to_string(vec_mul(parse_vec(Utf8("[1.0, 2.0]")),Utf8("[3.0, 4.0]"))) | +--------------------------------------------------------------------------+ | [3,8] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_mul('[1.0, 2.0]', parse_vec('[3.0, 4.0]'))); +--------------------------------------------------------------------------+ | vec_to_string(vec_mul(Utf8("[1.0, 2.0]"),parse_vec(Utf8("[3.0, 4.0]")))) | +--------------------------------------------------------------------------+ | [3,8] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_sub('[1.0, 1.0]', '[1.0, 2.0]')); +---------------------------------------------------------------+ | vec_to_string(vec_sub(Utf8("[1.0, 1.0]"),Utf8("[1.0, 2.0]"))) | +---------------------------------------------------------------+ | [0,-1] | +---------------------------------------------------------------+ SELECT vec_to_string(vec_sub('[-1.0, -1.0]', '[1.0, 2.0]')); +-----------------------------------------------------------------+ | vec_to_string(vec_sub(Utf8("[-1.0, -1.0]"),Utf8("[1.0, 2.0]"))) | +-----------------------------------------------------------------+ | [-2,-3] | +-----------------------------------------------------------------+ SELECT vec_to_string(vec_sub('[1.0, 1.0]', parse_vec('[1.0, 2.0]'))); +--------------------------------------------------------------------------+ | vec_to_string(vec_sub(Utf8("[1.0, 1.0]"),parse_vec(Utf8("[1.0, 2.0]")))) | +--------------------------------------------------------------------------+ | [0,-1] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_sub('[-1.0, -1.0]', parse_vec('[1.0, 2.0]'))); +----------------------------------------------------------------------------+ | vec_to_string(vec_sub(Utf8("[-1.0, -1.0]"),parse_vec(Utf8("[1.0, 2.0]")))) | +----------------------------------------------------------------------------+ | [-2,-3] | +----------------------------------------------------------------------------+ SELECT vec_to_string(vec_sub(parse_vec('[1.0, 1.0]'), '[1.0, 2.0]')); +--------------------------------------------------------------------------+ | vec_to_string(vec_sub(parse_vec(Utf8("[1.0, 1.0]")),Utf8("[1.0, 2.0]"))) | +--------------------------------------------------------------------------+ | [0,-1] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_sub(parse_vec('[-1.0, -1.0]'), '[1.0, 2.0]')); +----------------------------------------------------------------------------+ | vec_to_string(vec_sub(parse_vec(Utf8("[-1.0, -1.0]")),Utf8("[1.0, 2.0]"))) | +----------------------------------------------------------------------------+ | [-2,-3] | +----------------------------------------------------------------------------+ SELECT vec_elem_sum('[1.0, 2.0, 3.0]'); +---------------------------------------+ | vec_elem_sum(Utf8("[1.0, 2.0, 3.0]")) | +---------------------------------------+ | 6.0 | +---------------------------------------+ SELECT vec_elem_sum('[-1.0, -2.0, -3.0]'); +------------------------------------------+ | vec_elem_sum(Utf8("[-1.0, -2.0, -3.0]")) | +------------------------------------------+ | -6.0 | +------------------------------------------+ SELECT vec_elem_sum(parse_vec('[1.0, 2.0, 3.0]')); +--------------------------------------------------+ | vec_elem_sum(parse_vec(Utf8("[1.0, 2.0, 3.0]"))) | +--------------------------------------------------+ | 6.0 | +--------------------------------------------------+ SELECT vec_elem_sum(parse_vec('[-1.0, -2.0, -3.0]')); +-----------------------------------------------------+ | vec_elem_sum(parse_vec(Utf8("[-1.0, -2.0, -3.0]"))) | +-----------------------------------------------------+ | -6.0 | +-----------------------------------------------------+ SELECT vec_elem_avg('[1.0, 2.0, 3.0]'); +---------------------------------------+ | vec_elem_avg(Utf8("[1.0, 2.0, 3.0]")) | +---------------------------------------+ | 2.0 | +---------------------------------------+ SELECT vec_elem_avg('[-1.0, -2.0, -3.0]'); +------------------------------------------+ | vec_elem_avg(Utf8("[-1.0, -2.0, -3.0]")) | +------------------------------------------+ | -2.0 | +------------------------------------------+ SELECT vec_elem_avg(parse_vec('[1.0, 2.0, 3.0]')); +--------------------------------------------------+ | vec_elem_avg(parse_vec(Utf8("[1.0, 2.0, 3.0]"))) | +--------------------------------------------------+ | 2.0 | +--------------------------------------------------+ SELECT vec_elem_avg(parse_vec('[-1.0, -2.0, -3.0]')); +-----------------------------------------------------+ | vec_elem_avg(parse_vec(Utf8("[-1.0, -2.0, -3.0]"))) | +-----------------------------------------------------+ | -2.0 | +-----------------------------------------------------+ SELECT vec_to_string(vec_div('[1.0, 2.0]', '[3.0, 4.0]')); +---------------------------------------------------------------+ | vec_to_string(vec_div(Utf8("[1.0, 2.0]"),Utf8("[3.0, 4.0]"))) | +---------------------------------------------------------------+ | [0.33333334,0.5] | +---------------------------------------------------------------+ SELECT vec_to_string(vec_div(parse_vec('[1.0, 2.0]'), '[3.0, 4.0]')); +--------------------------------------------------------------------------+ | vec_to_string(vec_div(parse_vec(Utf8("[1.0, 2.0]")),Utf8("[3.0, 4.0]"))) | +--------------------------------------------------------------------------+ | [0.33333334,0.5] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_div('[1.0, 2.0]', parse_vec('[3.0, 4.0]'))); +--------------------------------------------------------------------------+ | vec_to_string(vec_div(Utf8("[1.0, 2.0]"),parse_vec(Utf8("[3.0, 4.0]")))) | +--------------------------------------------------------------------------+ | [0.33333334,0.5] | +--------------------------------------------------------------------------+ SELECT vec_to_string(vec_div('[1.0, -2.0]', parse_vec('[0.0, 0.0]'))); +---------------------------------------------------------------------------+ | vec_to_string(vec_div(Utf8("[1.0, -2.0]"),parse_vec(Utf8("[0.0, 0.0]")))) | +---------------------------------------------------------------------------+ | [inf,-inf] | +---------------------------------------------------------------------------+ SELECT vec_elem_product('[1.0, 2.0, 3.0, 4.0]'); +------------------------------------------------+ | vec_elem_product(Utf8("[1.0, 2.0, 3.0, 4.0]")) | +------------------------------------------------+ | 24.0 | +------------------------------------------------+ SELECT vec_elem_product('[-1.0, -2.0, -3.0, 4.0]'); +---------------------------------------------------+ | vec_elem_product(Utf8("[-1.0, -2.0, -3.0, 4.0]")) | +---------------------------------------------------+ | -24.0 | +---------------------------------------------------+ SELECT vec_elem_product(parse_vec('[1.0, 2.0, 3.0, 4.0]')); +-----------------------------------------------------------+ | vec_elem_product(parse_vec(Utf8("[1.0, 2.0, 3.0, 4.0]"))) | +-----------------------------------------------------------+ | 24.0 | +-----------------------------------------------------------+ SELECT vec_elem_product(parse_vec('[-1.0, -2.0, -3.0, 4.0]')); +--------------------------------------------------------------+ | vec_elem_product(parse_vec(Utf8("[-1.0, -2.0, -3.0, 4.0]"))) | +--------------------------------------------------------------+ | -24.0 | +--------------------------------------------------------------+ SELECT vec_to_string(vec_norm('[0.0, 2.0, 3.0]')); +--------------------------------------------------+ | vec_to_string(vec_norm(Utf8("[0.0, 2.0, 3.0]"))) | +--------------------------------------------------+ | [0,0.5547002,0.8320503] | +--------------------------------------------------+ SELECT vec_to_string(vec_norm('[1.0, 2.0, 3.0]')); +--------------------------------------------------+ | vec_to_string(vec_norm(Utf8("[1.0, 2.0, 3.0]"))) | +--------------------------------------------------+ | [0.26726124,0.5345225,0.8017837] | +--------------------------------------------------+ SELECT vec_to_string(vec_norm('[7.0, 8.0, 9.0]')); +--------------------------------------------------+ | vec_to_string(vec_norm(Utf8("[7.0, 8.0, 9.0]"))) | +--------------------------------------------------+ | [0.5025707,0.5743665,0.64616233] | +--------------------------------------------------+ SELECT vec_to_string(vec_norm('[7.0, -8.0, 9.0]')); +---------------------------------------------------+ | vec_to_string(vec_norm(Utf8("[7.0, -8.0, 9.0]"))) | +---------------------------------------------------+ | [0.5025707,-0.5743665,0.64616233] | +---------------------------------------------------+ SELECT vec_to_string(vec_norm(parse_vec('[7.0, -8.0, 9.0]'))); +--------------------------------------------------------------+ | vec_to_string(vec_norm(parse_vec(Utf8("[7.0, -8.0, 9.0]")))) | +--------------------------------------------------------------+ | [0.5025707,-0.5743665,0.64616233] | +--------------------------------------------------------------+ SELECT vec_to_string(vec_sum(v)) FROM ( SELECT '[1.0, 2.0, 3.0]' AS v UNION ALL SELECT '[-1.0, -2.0, -3.0]' AS v UNION ALL SELECT '[4.0, 5.0, 6.0]' AS v ); +---------------------------+ | vec_to_string(vec_sum(v)) | +---------------------------+ | [4,5,6] | +---------------------------+ SELECT vec_to_string(vec_avg(v)) FROM ( SELECT '[1.0, 2.0, 3.0]' AS v UNION ALL SELECT '[10.0, 11.0, 12.0]' AS v UNION ALL SELECT '[4.0, 5.0, 6.0]' AS v ); +---------------------------+ | vec_to_string(vec_avg(v)) | +---------------------------+ | [5,6,7] | +---------------------------+ SELECT vec_to_string(vec_product(v)) FROM ( SELECT '[1.0, 2.0, 3.0]' AS v UNION ALL SELECT '[-1.0, -2.0, -3.0]' AS v UNION ALL SELECT '[4.0, 5.0, 6.0]' AS v ); +-------------------------------+ | vec_to_string(vec_product(v)) | +-------------------------------+ | [-4,-20,-54] | +-------------------------------+ SELECT vec_dim('[7.0, 8.0, 9.0, 10.0]'); +----------------------------------------+ | vec_dim(Utf8("[7.0, 8.0, 9.0, 10.0]")) | +----------------------------------------+ | 4 | +----------------------------------------+ SELECT v, vec_dim(v) FROM ( SELECT '[1.0, 2.0, 3.0]' AS v UNION ALL SELECT '[-1.0]' AS v UNION ALL SELECT '[4.0, 5.0, 6.0]' AS v ) Order By vec_dim(v) ASC; +-----------------+------------+ | v | vec_dim(v) | +-----------------+------------+ | [-1.0] | 1 | | [1.0, 2.0, 3.0] | 3 | | [4.0, 5.0, 6.0] | 3 | +-----------------+------------+ SELECT v, vec_dim(v) FROM ( SELECT '[1.0, 2.0, 3.0]' AS v UNION ALL SELECT '[-1.0]' AS v UNION ALL SELECT '[7.0, 8.0, 9.0, 10.0]' AS v ) Order By vec_dim(v) ASC; +-----------------------+------------+ | v | vec_dim(v) | +-----------------------+------------+ | [-1.0] | 1 | | [1.0, 2.0, 3.0] | 3 | | [7.0, 8.0, 9.0, 10.0] | 4 | +-----------------------+------------+ SELECT vec_kth_elem('[1.0, 2.0, 3.0]', 2); +------------------------------------------------+ | vec_kth_elem(Utf8("[1.0, 2.0, 3.0]"),Int64(2)) | +------------------------------------------------+ | 3.0 | +------------------------------------------------+ SELECT v, vec_kth_elem(v, 0) AS first_elem FROM ( SELECT '[1.0, 2.0, 3.0]' AS v UNION ALL SELECT '[4.0, 5.0, 6.0, 7.0]' AS v UNION ALL SELECT '[8.0]' AS v ) WHERE vec_kth_elem(v, 0) > 2.0 ORDER BY first_elem; +----------------------+------------+ | v | first_elem | +----------------------+------------+ | [4.0, 5.0, 6.0, 7.0] | 4.0 | | [8.0] | 8.0 | +----------------------+------------+ 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] | +---------------------------------------------------+ SELECT h, vec_to_string(vec_sum(v)), vec_to_string(vec_avg(v)), vec_to_string(vec_product(v)) FROM ( SELECT 'a' AS h, '[1.0, 1.0]' AS v UNION ALL SELECT 'a' AS h, '[2.0, 2.0]' AS v UNION ALL SELECT 'b' AS h, '[3.0, 3.0]' AS v ) GROUP BY h ORDER BY h; +---+---------------------------+---------------------------+-------------------------------+ | h | vec_to_string(vec_sum(v)) | vec_to_string(vec_avg(v)) | vec_to_string(vec_product(v)) | +---+---------------------------+---------------------------+-------------------------------+ | a | [3,3] | [1.5,1.5] | [2,2] | | b | [3,3] | [3,3] | [3,3] | +---+---------------------------+---------------------------+-------------------------------+ -- On partitioned tables the aggregates are split into partial state and merge. -- Rows only land in two of the three partitions, the third one has an empty state. -- The two non-empty partitions differ in row count and mean, so vec_avg must weight by count. CREATE TABLE vector_aggr_partitioned ( ts TIMESTAMP TIME INDEX, k INT, g STRING, v VECTOR(2), PRIMARY KEY(k) ) PARTITION ON COLUMNS (k) (k < 10, k >= 10 AND k < 20, k >= 20); Affected Rows: 0 INSERT INTO vector_aggr_partitioned VALUES (1000, 1, 'a', '[1.0, 1.0]'), (2000, 11, 'a', '[8.0, 8.0]'), (3000, 2, 'a', '[3.0, 3.0]'), (3500, 3, 'a', '[5.0, 5.0]'), (4000, 12, 'b', '[4.0, 4.0]'); Affected Rows: 5 SELECT vec_to_string(vec_sum(v)), vec_to_string(vec_avg(v)), vec_to_string(vec_product(v)) FROM vector_aggr_partitioned; +---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | vec_to_string(vec_sum(vector_aggr_partitioned.v)) | vec_to_string(vec_avg(vector_aggr_partitioned.v)) | vec_to_string(vec_product(vector_aggr_partitioned.v)) | +---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | [21,21] | [4.2,4.2] | [480,480] | +---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ SELECT g, vec_to_string(vec_sum(v)), vec_to_string(vec_avg(v)), vec_to_string(vec_product(v)) FROM vector_aggr_partitioned GROUP BY g ORDER BY g; +---+---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | g | vec_to_string(vec_sum(vector_aggr_partitioned.v)) | vec_to_string(vec_avg(vector_aggr_partitioned.v)) | vec_to_string(vec_product(vector_aggr_partitioned.v)) | +---+---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | a | [17,17] | [4.25,4.25] | [120,120] | | b | [4,4] | [4,4] | [4,4] | +---+---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ -- A NULL vector makes vec_sum and vec_product NULL, vec_avg skips it. INSERT INTO vector_aggr_partitioned VALUES (5000, 21, 'b', NULL); Affected Rows: 1 SELECT vec_to_string(vec_sum(v)), vec_to_string(vec_avg(v)), vec_to_string(vec_product(v)) FROM vector_aggr_partitioned; +---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | vec_to_string(vec_sum(vector_aggr_partitioned.v)) | vec_to_string(vec_avg(vector_aggr_partitioned.v)) | vec_to_string(vec_product(vector_aggr_partitioned.v)) | +---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | | [4.2,4.2] | | +---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ SELECT g, vec_to_string(vec_sum(v)), vec_to_string(vec_avg(v)), vec_to_string(vec_product(v)) FROM vector_aggr_partitioned GROUP BY g ORDER BY g; +---+---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | g | vec_to_string(vec_sum(vector_aggr_partitioned.v)) | vec_to_string(vec_avg(vector_aggr_partitioned.v)) | vec_to_string(vec_product(vector_aggr_partitioned.v)) | +---+---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ | a | [17,17] | [4.25,4.25] | [120,120] | | b | | [4,4] | | +---+---------------------------------------------------+---------------------------------------------------+-------------------------------------------------------+ DROP TABLE vector_aggr_partitioned; Affected Rows: 0