Перейти к содержимому
Последнее обновление

EXPLODE_SPLIT

Описание​

Табличная функция explode_split разбивает строку на несколько подстрок по указанному разделителю и выводит каждую подстроку в отдельной строке. Её следует использовать вместе с LATERAL VIEW для преобразования вложенных структур данных в стандартную плоскую таблицу. Основное отличие между explode_split и explode_split_outer заключается в обработке значений NULL.

Синтаксис​

EXPLODE_SPLIT(<str>, <delimiter>)

Параметры​

  • <str>: строка типа String, которую нужно разбить.
  • <delimiter>: разделитель типа String.

Возвращаемое значение​

  • Возвращает столбец типа String, состоящий из полученных подстрок.

Примечания по использованию​

  1. Если <str> имеет значение NULL, возвращается 0 строк.
  2. Если <str> является пустой строкой ("") или не может быть разбита, возвращается 1 строка.
  3. Если <delimiter> имеет значение NULL, возвращается 0 строк.
  4. Если <delimiter> является пустой строкой (""), <str> разбивается побайтово (SPLIT_BY_STRING).

Примеры​

  1. Подготовка данных
    create table example(
    k1 int
    ) properties(
    "replication_num" = "1"
    );

    insert into example values(1);
  2. Обычные параметры
    select  * from example lateral view explode_split("ab,cd,ef", ",") t2 as c;
    +------+------+
    | k1 | c |
    +------+------+
    | 1 | ab |
    | 1 | cd |
    | 1 | ef |
    +------+------+
  3. Пустая строка и случаи, когда разбиение невозможно
    select  * from example lateral view explode_split("", ",") t2 as c;
    +------+------+
    | k1 | c |
    +------+------+
    | 1 | |
    +------+------+
    select  * from example lateral view explode_split("abc", ",") t2 as c;
    +------+------+
    | k1 | c |
    +------+------+
    | 1 | abc |
    +------+------+
  4. Параметр NULL
    select  * from example lateral view explode_split(NULL, ',') t2 as c;
    Empty set (0.03 sec)
  5. Пустой разделитель
    select  * from example lateral view explode_split('abc', '') t2 as c;
    +------+------+
    | k1 | c |
    +------+------+
    | 1 | a |
    | 1 | b |
    | 1 | c |
    +------+------+
  6. Разделитель равен NULL
    select  * from example lateral view explode_split('abc', null) t2 as c;
    Empty set (0.03 sec)