SingleStore DB

SCALAR_VECTOR_MUL

Multiplies each element in the vector blob with the specified scalar value and returns a single vector blob.

Syntax
SCALAR_VECTOR_MUL(scalar_value, vector_expression)
Arguments
  • scalar_value: A scalar value.

  • vector_expression: An expression that evaluates to a vector. The vector must be encoded as a blob containing packed single-precision or double-precision floating-point numbers in little-endian byte order.

Return Type

A blob containing packed single-precision floating-point numbers in little-endian byte order.

Remarks

A vector can be of any length, but blob lengths must be divisible by 4 bytes (or 8 bytes, depending on the datatype specified).

You can specify the datatype of the vector elements in which this operation is performed on the vector by adding a suffix to the function. Omitting the suffix from the function is equivalent to suffixing it with _F32. All operations are done using the specified datatype. The following table lists the suffixes and their datatype.

Suffix

Datatype

_I8

8-bit signed integer

_I16

16-bit signed integer

_I32

32-bit signed integer

_I64

64-bit signed integer

_F32

32-bit floating-point number (IEEE standard format)

_F64

64-bit floating-point number (IEEE standard format)

Examples

The following queries use the JSON_ARRAY_UNPACK() function to view the output in JSON format.

Multiplying a Vector with a Scalar

The following example multiplies a vector blob with a scalar value.

SELECT JSON_ARRAY_UNPACK(SCALAR_VECTOR_MUL(10, JSON_ARRAY_PACK('[6.21,3.84,7.19]'))) "Result";
****
+------------------------------------+
| Result                             |
+------------------------------------+
| [62.0999985,38.3999977,71.9000015] |
+------------------------------------+

You can also view the vector blob in hexadecimal format using the HEX() function.

SELECT HEX(SCALAR_VECTOR_MUL(10, JSON_ARRAY_PACK('[6.21,3.84,7.19]'))) "Result";
****              
+--------------------------+
| Result                   |
+--------------------------+
| 6666784299991942CDCC8F42 |
+--------------------------+
Typecasting the Datatype Using Suffixes

To perform this operation on vectors specified in a format other than the default 32-bit floating point number, specify a suffix with the SCALAR_VECTOR_MUL() function. For example,

SELECT JSON_ARRAY_UNPACK_I16(SCALAR_VECTOR_MUL_I16(10, JSON_ARRAY_PACK_I16('[6.21,3.84,7.19]')));
****
+-------------------------------------------------------------------------------------------+
| JSON_ARRAY_UNPACK_I16(SCALAR_VECTOR_MUL_I16(10, JSON_ARRAY_PACK_I16('[6.21,3.84,7.19]'))) |
+-------------------------------------------------------------------------------------------+
| [60,40,70]                                                                                |
+-------------------------------------------------------------------------------------------+

In this query, the JSON_ARRAY_PACK() converts the input values to 16-bit integers, hence the fractional values are lost.