# Explode array with position > Supported in: Batch, Streaming Explode array into a row per value as a struct containing the element's relative position in the array and the element itself. **Expression categories:** Array ## Declared arguments * **Array:** Array of values to explode.
*Expression\>* * *optional* **Keep empty / null arrays:** If true, empty arrays and nulls will be kept as nulls in the output, otherwise they will be filtered.
*Literal\* **Type variable bounds:** *T accepts AnyType* **Output type:** *Struct\* ## Examples ### Example 1: Base case **Argument values:** * **Array:** `array` * **Keep empty / null arrays:** *null* **Given input table:** | array | | ----- | | \[ one, two, three ] | | \[ four, five ] | **Expected output table:** | array | | ----- | | {
 element -> one,
 position -> 1,
} | | {
 element -> two,
 position -> 2,
} | | {
 element -> three,
 position -> 3,
} | | {
 element -> four,
 position -> 1,
} | | {
 element -> five,
 position -> 2,
} | *** ### Example 2: Edge case **Argument values:** * **Array:** `array` * **Keep empty / null arrays:** false **Given input table:** | array | | ----- | | \[ one, two, three ] | | \[ ] | | \[ four, five ] | | \[ ] | **Expected output table:** | array | | ----- | | {
 element -> one,
 position -> 1,
} | | {
 element -> two,
 position -> 2,
} | | {
 element -> three,
 position -> 3,
} | | {
 element -> four,
 position -> 1,
} | | {
 element -> five,
 position -> 2,
} | *** ### Example 3: Edge case **Argument values:** * **Array:** `array` * **Keep empty / null arrays:** true **Given input table:** | array | | ----- | | \[ one, two, three ] | | \[ ] | | \[ four, five ] | | \[ ] | **Expected output table:** | array | | ----- | | {
 element -> one,
 position -> 1,
} | | {
 element -> two,
 position -> 2,
} | | {
 element -> three,
 position -> 3,
} | | {
 element -> *null*,
 position -> *null*,
} | | {
 element -> four,
 position -> 1,
} | | {
 element -> five,
 position -> 2,
} | | {
 element -> *null*,
 position -> *null*,
} | ***