---
{
    "title": "EXPLODE_SPLIT_OUTER",
    "language": "en",
    "description": "The explodesplitouter table function is used to split a string into multiple substrings according to the specified delimiter,"
}
---

## Description
The `explode_split_outer` table function is used to split a string into multiple substrings according to the specified delimiter, and expand each substring into a separate row.
It should be used together with [`LATERAL VIEW`](../../../query-data/lateral-view.md) to flatten nested data structures into a standard flat table format.
The main difference between `explode_split_outer` and [`explode_split`](./explode-split.md) is how they handle null values.

## Syntax
```sql
EXPLODE_SPLIT_OUTER(<str>, <delimiter>)
```

## Parameters
- `<str>` String type, the string to be split.
- `<delimiter>` String type, the delimiter.

## Return Value
- Returns a column composed of the split substrings, with column type String.

## Usage Notes
1. If `<str>` is NULL, 1 row with NULL is returned.
2. If `<str>` is an empty string ("") or cannot be split, 1 row is returned.
3. If `<delimiter>` is NULL, 1 row with NULL is returned.
4. If `<delimiter>` is an empty string (""), `<str>` will be split by bytes([`SPLIT_BY_STRING`](../scalar-functions/string-functions/split-by-string.md)).

## Examples
0. Prepare data
    ```sql
    create table example(
        k1 int
    ) properties(
        "replication_num" = "1"
    );

    insert into example values(1);
    ```
1. Regular parameters
    ```sql
    select  * from example lateral view explode_split_outer("ab,cd,ef", ",") t2 as c;
    ```
    ```text
    +------+------+
    | k1   | c    |
    +------+------+
    |    1 | ab   |
    |    1 | cd   |
    |    1 | ef   |
    +------+------+
    ```
2. Empty string and unsplittable cases
    ```sql
    select  * from example lateral view explode_split_outer("", ",") t2 as c;
    ```
    ```text
    +------+------+
    | k1   | c    |
    +------+------+
    |    1 |      |
    +------+------+
    ```
    ```sql
    select  * from example lateral view explode_split_outer("abc", ",") t2 as c;
    ```
    ```text
    +------+------+
    | k1   | c    |
    +------+------+
    |    1 | abc  |
    +------+------+
    ```
3. NULL parameter
    ```sql
    select  * from example lateral view explode_split_outer(NULL, ',') t2 as c;
    ```
    ```text
    +------+------+
    | k1   | c    |
    +------+------+
    |    1 | NULL |
    +------+------+
    ```
4. Empty delimiter
    ```sql
    select  * from example lateral view explode_split_outer('abc', '') t2 as c;
    ```
    ```text
    +------+------+
    | k1   | c    |
    +------+------+
    |    1 | a    |
    |    1 | b    |
    |    1 | c    |
    +------+------+
    ```
5. Delimiter is NULL
    ```sql
    select  * from example lateral view explode_split_outer('abc', null) t2 as c;
    ```
    ```text
    +------+------+
    | k1   | c    |
    +------+------+
    |    1 | NULL |
    +------+------+
    ```