[
https://issues.apache.org/jira/browse/FLINK-32260?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Nuyanzin resolved FLINK-32260.
-------------------------------------
Resolution: Fixed
Merged to master as
[e6e0f47bf3e7f7541da9e7be009cc6dcf4d86129|https://github.com/apache/flink/commit/e6e0f47bf3e7f7541da9e7be009cc6dcf4d86129]
> Add ARRAY_SLICE support in SQL & Table API
> ------------------------------------------
>
> Key: FLINK-32260
> URL: https://issues.apache.org/jira/browse/FLINK-32260
> Project: Flink
> Issue Type: Improvement
> Components: Table SQL / Planner
> Affects Versions: 1.18.0
> Reporter: Bonnie Varghese
> Assignee: Hanyu Zheng
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.18.0
>
>
> Implement the array_slice function to extract a subset of elements from an
> array.
> This function returns a subset of the input array, starting from
> 'start_offset' and ending at 'end_offset'. These offsets are 1-based and can
> be positive (counted from the start of the array) or negative (counted from
> the end of the array).
> Initially, the function checks if 'start_offset' or 'end_offset' are 0. If
> so, they are treated as starting from the beginning of the input array.
> Next, the function checks if 'start_offset' is after 'end_offset' or if the
> input array is empty. In such cases, it will return an empty array.
> For the remaining cases, the function proceeds as follows: if either
> 'start_offset' or 'end_offset' exceed the array bounds, they are adjusted to
> the size of the array. Conversely, if the absolute value of a negative
> 'start_offset' or 'end_offset' is greater than the size of the array, the
> corresponding offset is reset to the beginning of the array, which is 1.
> The function will return null if any input is null.
> Syntax:
>
> code
> {code:java}
> ARRAY_SLICE(array, start_offset, end_offset){code}
> {{ }}
> Arguments:
> array: The array that contains the elements you want to slice.
> start_offset: The inclusive starting offset.
> end_offset: The inclusive ending offset.
> An offset can be positive or negative. A positive offset starts from the
> beginning of the input array and is 1-based. A negative offset starts from
> the end of the input array. Out-of-bounds offsets are supported. if
> start_offset == 0 or end_offset == 0, we treat them start from the beginning
> of the input array.
> Returns:
> The input array can contain NULL elements. NULL elements are included in the
> resulting array.
> Returns NULL if array, start_offset, or end_offset is NULL.
> Returns an empty array if array is empty.
> Returns an empty array if the position of the start_offset in the array is
> after the position of the end_offset.
> Examples:
>
> {code:java}
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], 1, 3)
> Output: [a, b, c]
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], -1, -3)
> Output: []
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], -3, -1)
> Output[c, d, e]
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], 3, 3)
> Output[c]
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], 1, 30)
> Output[a, b,c,d,e]
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], 1, -30)
> Output[]
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], -30, 30)
> Output[a, b, c, d, e]
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], -30, -5)
> Output[a]
> SELECT ARRAY_SLICE(['a', 'b', 'c', 'd', 'e'], 5, 30)
> Output[e]
>
> SELECT ARRAY_SLICE(['a', 'b', NULL, 'd', 'e'], 1, 3)
> Output[a, b, null]
> SELECT ARRAY_SLICE(['a', 'b', NULL, 'd', 'e'], 0, 0)
> Output[a]
> {code}
>
> see also:
> spark: [https://spark.apache.org/docs/latest/api/sql/index.html#slice]
> google cloud:
> [https://cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_slice]
> ClickHouse:
> [https://clickhouse.com/docs/en/sql-reference/functions/array-functions#arrayslice]
> DockDb: [https://duckdb.org/docs/sql/functions/nested#list-functions]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)