ARRAY_CAT_DISTINCT
Concatenates two or more arrays in the order of the input arguments. After concatenation, the function removes duplicates from the result array while preserving the first occurrence order. The function skips any NULL input arguments. If all input arrays are NULL, the function returns a NULL. If at least one NULL element is present in the array, the function returns a NULL in the result array with the position of the first NULL the function finds in the order of the input arguments. SyntaxSQL
Examples
Concatenate Two Arrays and Remove Duplicates
Concatenate two arrays and remove duplicate elements within the arrays.
SQL
[1,2,3,4,5]
Concatenate Two Arrays with NULLs and Remove Duplicates
Deduplicate the contents of the array. In this case, the array contains NULLs.
SQL
[1,2,NULL,4]
ARRAY_DISTINCT
Removes duplicates from an array while preserving the first occurrence order. If at least one NULL is present in the array, the function returns a NULL with the position of the first NULL of the input array in the output array. SyntaxSQL
Examples
Remove Duplicates from an Array
Deduplicate the contents of the array.
SQL
[1,2,3]
Remove Duplicates from an Array with NULLs
Deduplicate the contents of the array. In this case, the array contains NULLs.
SQL
[1,2,NULL,3]
ARRAY_INTERSECT_DISTINCT_COUNT
Returns the count of distinct elements that are common to both input arrays as anINT value. The function applies set semantics, collapsing duplicate elements within each array before computing the intersection. Both arrays must have the same element type.
If both array arguments are NULL, the function returns NULL. If one argument is NULL and the other is a non-NULL array, the function returns NULL. If both arrays are empty, the function returns 0. NULL elements within arrays participate in the intersection (a NULL in both arrays counts as one shared element).
Syntax
SQL
Examples
Count Shared Elements Between Two Arrays
Count the distinct elements shared between two integer arrays. Both arrays contain
1 and 2, so the result is 2 even though duplicates are present.
SQL
2
Count Shared Elements with No Overlap
Count the distinct elements shared between two arrays that have no elements in common.
SQL
0
Count Shared Elements with an Empty Array
When one array is empty, no elements are shared.
SQL
0
ARRAY_LENGTH
Returns the length of the array for the specified dimension. If the array is a nested array, the function returns the length of the outermost array. SyntaxSQL
Example
Return the length of the array.
SQL
2
ARRAY_SORT
Sorts and returns the input array based on the natural ordering of its elements. The behavior of this function varies depending on the syntax you use. Syntaxes Basic Array Sort Sorts and returns the input array based on the natural ordering of its elements. If one of the array elements is NULL, then this function sorts the NULL values to the end of the array.SQL
Sort an Array With a Lambda Function
Sorts and returns the input array based on the results of the specified Lambda function. The function should have two arguments representing two elements of the array. This function should return a negative integer, 0, or a positive integer if the first element is less than, equal to, or greater than the second element, respectively.
SQL
The Ocient System supports this syntax with the data pipeline functionality only. For details, see Transform Data in Data Pipelines.
SQL
Sort an Array in the Specified Order with NULL Elements
Determines how the array handles the order of elements in the array and where NULL elements appear.
SQL
Examples
Sort an Array
Sort an array of three elements
[2,3,1].
SQL
[1,2,3]
Sort an Array by Specifying the Sort Order
Sort an array of four elements [2,3,1,NULL] and specify the order of the elements in descending order.
SQL
[NULL,3,2,1]
Sort an Array by Specifying the Sort Order and NULL Placement
Sort an array of four elements [2,NULL,3,1] and specify the order of the elements in ascending order, and have the NULL element appear last.
SQL
[1,2,3,NULL]
ARRAY_TRANSFORM
Transforms one or more arrays based on the logic in a lambda expression that also receives the elements at the same position in every array. Use this function to transform every element in a single array, or to combine corresponding elements from multiple arrays element-wise. The first one or more arguments are expressions that evaluate to arrays that contain elements to transform. The last argument is a lambda expression or other reference function that defines how to transform each element using the elements at the same position in every array. The last argument must be of the form(x1 [T1], ..., xN [TN]) -> U. This form returns a value of type U from the elements x1 through xN at the same position in each of the N array arguments. Declaring the type of each element is optional. If you omit a type, the system infers it from the corresponding array argument. If you declare a type, it must match the element type of the corresponding array.
The last argument can also be a reference to an existing function whose signature accepts one argument for each array argument.
The ARRAY_TRANSFORM function returns an array with the length of the longest input array. The returned array has the type returned by the lambda function. If the input arrays are not the same length, the system pads the shorter arrays with NULL values. If any input array is NULL, the result is NULL. For multi-dimensional arrays, the function applies to the outermost dimension. You can nest ARRAY_TRANSFORM functions to apply them over inner dimensions.
Syntax
SQL
Examples
Transform a Single Array Using a Lambda Function
Use the
ARRAY_TRANSFORM function to convert each element of an array to uppercase.
SQL
["ALICE", "BOB", "CAROL"]
Transform a Single Array Using a Reference Function
Use the UPPER function as a reference function with the ARRAY_TRANSFORM function.
SQL
["ALICE", "BOB", "CAROL"]
Combine Elements from Two Arrays
Use the ARRAY_TRANSFORM function with two arrays to add the corresponding elements together.
SQL
[11, 22, 33]
Use a Reference Function with Multiple Arrays
Use the POWER function as a reference function with the ARRAY_TRANSFORM function to raise each base to the corresponding exponent from a second array. The POWER function accepts two numeric arguments, matching the required signature where the first argument is the element from the first array and the second argument is the element from the second array.
SQL
[4, 9, 16]
ARRAY_TRANSFORM_WITH_ORD
Transforms an array based on the logic in a lambda expression that also receives the 1-based ordinal of each element. Use this function when the transformation depends on the position of the element in the array, such as generating sequence numbers, weighting elements by index, or pairing elements with their position. The first argument is an expression that evaluates to an array that contains elements to transform. The second argument is a lambda expression or other reference function that defines how to transform each element using both its value and its position. The second argument must be of the form(x T, ord INT) -> U. This form returns a value of type U for an element x at 1-based position ord. The lambda function specifies the type T of the element x. The ordinal variable always has the INT type. If the lambda function declares a type for the ordinal variable, it must be INT.
The second argument can also be a reference to an existing function whose signature accepts the element type followed by a trailing INT argument.
The ARRAY_TRANSFORM_WITH_ORD function returns an array of elements with the same length as the array argument. The returned array has the type returned by the lambda function. If the input array is NULL, the result is NULL. For multi-dimensional arrays, the function applies to the outermost dimension. You can nest ARRAY_TRANSFORM_WITH_ORD functions to apply them over inner dimensions.
Syntax
SQL
Examples
Prefix Each Element with Its Position
Use the
ARRAY_TRANSFORM_WITH_ORD function with a lambda function that prepends the 1-based position of each element.
SQL
["1. alice", "2. bob", "3. carol"]
Multiply Each Element by Its Position
Use the ARRAY_TRANSFORM_WITH_ORD function with a literal array to multiply each element by its 1-based position.
SQL
[10, 40, 90]
Use a Reference Function
Use the POWER function as a reference function with the ARRAY_TRANSFORM_WITH_ORD function. The POWER function accepts two numeric arguments, matching the required (T, INT) -> U signature where the first argument is the element value and the second argument is the 1-based ordinal.
SQL
[2, 9, 256]
JACCARD_SIMILARITY
Returns the Jaccard similarity coefficient of two arrays as aDOUBLE value between 0.0 and 1.0. The Jaccard similarity measures the size of the intersection divided by the size of the union of the two sets: |A intersect B| / |A union B|. The function applies set semantics, collapsing duplicate elements within each array before computing the result. Both arrays must have the same element type.
A result of 1.0 means that the two arrays contain the same distinct elements. A result of 0.0 means that the two arrays share no elements.
If both array arguments are empty, the function returns 1.0. If one array is non-empty and the other is empty, the function returns 0.0. If both array arguments are NULL, the function returns NULL. NULL elements within arrays participate in the similarity calculation.
Syntax
SQL
Examples
Compute Jaccard Similarity of Overlapping Arrays
Compute the Jaccard similarity of two arrays that share some elements. The distinct elements of the first array are
{1, 2, 3} and the second are {2, 3, 4}. The intersection is {2, 3} (size two) and the union is {1, 2, 3, 4} (size four), so the Jaccard similarity is 2/4 = 0.5.
SQL
0.5
Compute Jaccard Similarity of Identical Arrays
When both arrays contain the same distinct elements, the result is 1.0.
SQL
1.0
Compute Jaccard Similarity with Duplicates
The distinct elements of the first array are {1, 2} and the second one are {1, 2, 3}. The intersection is {1, 2} (size two) and the union is {1, 2, 3} (size three), so the result is approximately 0.667.
SQL
0.6666666666666666
Compute Jaccard Similarity with No Overlap
When the two arrays share no elements, the result is 0.0.
SQL
0.0
UNNEST
Expands each element in an input array into an individual row. For example, theUNNEST function on an array column of type ARRAY(INT) with values [2, 6] yields two result rows with integers 2 and 6.
The values of the other columns in each input row are unchanged in each corresponding output row. You can specify multiple array columns to unnest the specified arrays from each row in parallel.
Syntax
SQL
The
UNNEST function supports these options. When you use only one of these options, enclosing the option in parentheses is optional. However, if you use more than one of these options, you must enclose them in parentheses.
These examples demonstrate how the
UNNEST function operates on arrays and other objects. Most of the examples use the data rows from this table.
Text
UNNEST on column b.
SQL
Text
ORDINALITY Option
In this example, the ORDINALITY option adds a second return column that represents the index position of the value in the input array.
SQL
Text
UNNEST query returns only one row because one of the two rows in column d is an empty array.
If you use the NULL_INPUT option, the query returns a second row with the NULL value.
SQL
Text
UNNEST also does not return array values that are NULL unless you specify the NULL_INPUT option.
SQL
Text
UNNEST function expands only one array layer.
The empty array remains in the returned values.
SQL
Text
UNNEST Statements
Multiple UNNEST statements in a query produce a per-row Cartesian product of all the unnested values.
SQL
Text
UNNEST Statements in Reverse Order
This example uses UNNEST on the same columns but in reverse order.
SQL
Text
NULL_INPUT option, the query still returns NULL for column c to correspond with column b.
SQL
Text
SQL
Text
UNNEST to capture values of arrays within arrays.
SQL
Text
SQL
Text
INT but no rows.
Expand an Empty Array Column Without the NULL_INPUT Option
This example selects the non-array column a and an empty array column. The query returns no rows because empty or NULL array values are not returned unless you specify the NULL_INPUT option.
SQL
Text
NULL_INPUT Option
This query does not include the NULL_INPUT option, which causes the result to omit the NULL array values in column e.
SQL
Text
NULL_INPUT Option
This query includes the NULL_INPUT option, which means that the query returns the NULL values in column e.
SQL
Text
INTEGER with no rows because there are no values to unnest.
SQL
Text
ZIP_WITH_ORD
Merges two or more input arrays, element-wise, into a single array using a combining function that also receives the 1-based ordinal of each tuple. Use this function when the combining logic depends on the position of the elements in the arrays. If one array is shorter than the others, the function pads the shorter array withNULL values to match the length of the longest array before applying the combining function.
The function returns an array of length max(length(array1), length(array2), ...) containing elements of type V as returned by the lambda function. If the arrays are not the same length, the system pads shorter arrays with NULL values.
The system rewrites the ZIP_WITH_ORD function internally to the ARRAY_TRANSFORM_WITH_ORD function. The system first merges the input arrays and then applies the ordinal-aware transform to the resulting tuples.
Syntax
SQL
Example
Use the
ZIP_WITH_ORD function to compute a weighted line total that includes the line number.
SQL
["Line 1: 200", "Line 2: 1000", "Line 3: 300"]
Other Array Functions
Function Examples
Array Operators
Ocient array operators allow you to concatenate and check for containment or overlap of data. Also, you can retrieve specific elements or slices within arrays.Contains Operator (@>)
The @> operator determines whether a left-side array contains a scalar value or array elements on the right side.
@> Syntax
SQL
Examples
These examples use the
@> operator to test whether the left-side array contains all the elements from the right-side array.
Array Containment (True Case)
This example returns true because all right-side elements are in the left-side array.
SQL
true
Array Containment (False Case)
If the right-side array contains at least one value not present in the left-side array, the query returns false. In this example, the right-side array has one value, 5, not present on the left side.
SQL
false
Scalar Containment in an Array
This example checks whether a single scalar value is in the left-side array.
SQL
true
Contained In Operator (<@)
The <@ operator checks whether a right-side array contains all the elements on the left side.
Syntax
SQL
Examples
Array Contained Within Another Array (True Case)
This example returns
true because all left-side elements are in the right-side array.
SQL
true
String Membership Check
<@ and other array operators can check whether individual strings are present in an array. The 'oranges' string is present in the right-side array.
SQL
true
Overlap Operator (&&)
The overlap operator && determines whether any elements between two arrays are common.
Syntax
SQL
Examples
Check Overlap Between Arrays (True Case)
As long as at least one value is present in both arrays, the
&& operator returns true. Both of these arrays contain the value 3.
SQL
true
Check Overlap Between Arrays (False Case)
Both of these arrays have no values in common, so the && operator returns false.
SQL
false
Slice Operator (:)
The slice operator : returns a subarray ranging from a left index to a right index, both of which are optional to specify. If you exclude both indexes, the slice operator returns the full array.
Syntax
SQL
The slice operator also follows these rules:
- Each index starts at
1. - If the array or either index value is NULL, the result of slicing is NULL.
- Ranges completely out of array bounds return an empty array. For example,
array[1, 2][4:5] = []. - Sequential slices slice each dimension of multidimensional arrays. For example,
ARRAY[ARRAY[1, 2, 3], ARRAY[4, 5, 6]][1:1][2:3] = ARRAY[ARRAY[2,3]]. - More than N sequential slices of an N-dimensional array, for example, three sequential slices on a two-dimensional array return an empty array. For example,
ARRAY[1, 2, 3][:][:] = []. - You cannot combine slicing with the access operator when slicing multidimensional arrays. Any access operator
[n]converts to[:n]. For example,Array_Val[4][1:6]would be equivalent toArray_Val[:4][1:6]. - Slicing an array of tuples such as
ARRAY[TUPLE<<INT,INT>>(1,2), TUPLE<<INT,INT>>(3,4)][1:1][2:3]slices[1:1]on the array and[2:3]on the tuple elements within the sliced array, and returns the valueTUPLE<<INT>>[TUPLE<<INT>>(2)].
2 and ending at index 3.
SQL
['2','3']
Array Slicing With No Right Index
The query returns all values after the second value because it does not specify an ending index.
SQL
['2','3','4']
Array Slicing With No Left Index
This query captures a subarray starting at the first index because it does not specify a starting value.
SQL
['1','2','3']
Array NULL Handling
Filtering with array functions can have different outcomes if they operate on an array containing NULL values or a NULL value of array type. Array comparison operators, such as@>, <@, and &&, do not follow normal Boolean logic when evaluating NULL values. To evaluate arrays for NULL values, use the filter functions FOR_ALL() or FOR_SOME(). For details about these functions, see Array Filters.
Examples
Evaluate a Single Array With No NULL Values
This example evaluates to false because none of the array values are NULL.
SQL
false
Evaluate a Single Array With NULL Values
This example evaluates to true because the array contains a NULL value.
SQL
true
Select Only Arrays Containing NULL Values
To further demonstrate array NULL behavior, these examples use this table loaded with a few array values, some of which are NULL or contain NULL values.
SQL
FOR_SOME function to filter the rows to return only arrays with NULL values. The output does not include the third row of the table because the row itself is NULL, and is not an array containing NULL values.
SQL
SQL
demo_array_table table, which has values that are NULL or contain NULL values.
SQL
SQL
FOR_ALL filter function to return only arrays with no NULL values. The output also contains rows with empty arrays.
The example uses the demo_array_table table, which has values that are NULL or contain NULL values.
SQL
SQL
ARRAY_LENGTH function removes any empty arrays.
This example uses the demo_array_table table, which has values that are NULL or contain NULL values.
SQL
SQL

