Skip to main content

POSEXPLODE

Description

The posexplode table function expands the <array> column into multiple rows and adds a column indicating the position, returning a STRUCT type. It should be used together with Lateral View and supports multiple Lateral Views. The main difference between posexplode and posexplode_outer is how they handle null values.

Syntax

POSEXPLODE(<array>)

Parameters

  • <array> Array type, NULL is not supported.

Return Value

  • Returns a single-column, multi-row STRUCT data. STRUCT consists of two columns:
  1. A column of integers starting from 0, incrementing by 1, until n – 1, where n represents the number of result rows.
  2. A column containing all elements of <array>.
  • If <array> is NULL or an empty array (number of elements is 0), 0 rows are returned.

Usage Notes

  1. <array> cannot be NULL or other types, otherwise an error will be reported.

Examples

  1. Prepare data
    create table example(
    k1 int
    ) properties(
    "replication_num" = "1"
    );

    insert into example values(1);
  2. Regular parameters
    select  * from (select 1 as k1) t1 lateral view posexplode([1, 2, null, 4, 5]) t2 as c;
    +------+-----------------------+
    | k1 | c |
    +------+-----------------------+
    | 1 | {"pos":0, "col":1} |
    | 1 | {"pos":1, "col":2} |
    | 1 | {"pos":2, "col":null} |
    | 1 | {"pos":3, "col":4} |
    | 1 | {"pos":4, "col":5} |
    +------+-----------------------+
    select  * from (select 1 as k1) t1 lateral view posexplode([1, 2, null, 4, 5]) t2 as pos, value;
    +------+------+-------+
    | k1 | pos | value |
    +------+------+-------+
    | 1 | 0 | 1 |
    | 1 | 1 | 2 |
    | 1 | 2 | NULL |
    | 1 | 3 | 4 |
    | 1 | 4 | 5 |
    +------+------+-------+
  3. Empty array
    select  * from (select 1 as k1) t1 lateral view posexplode([]) t2 as c;
    Empty set (0.03 sec)
  4. NULL parameter
    select  * from (select 1 as k1) t1 lateral view posexplode(NULL) t2 as c;
    ERROR 1105 (HY000): errCode = 2, detailMessage = only support array type for posexplode function but got NULL
  5. Non-array parameter
    select  * from (select 1 as k1) t1 lateral view posexplode('abc') t2 as c;
    ERROR 1105 (HY000): errCode = 2, detailMessage = only support array type for posexplode function but got VARCHAR(3)