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

STRUCT

Описание​

Создаёт и возвращает структуру на основе заданных значений. Функция принимает один или несколько параметров и возвращает структуру, содержащую все входные элементы.

Синтаксис​

STRUCT( <expr1> [ , <expr2> ... ] )

Параметры​

  • <expr1>, <expr2>, ...: Входные значения для построения структуры; поддерживается один или несколько параметров

Поддерживаемые типы элементов:

  • Числовые типы: TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL
  • Строковые типы: CHAR, VARCHAR, STRING
  • Типы даты и времени: DATE, DATETIME, DATEV2, DATETIMEV2
  • Логический тип: BOOLEAN
  • Типы IP: IPV4, IPV6
  • Сложные типы: ARRAY, MAP, STRUCT

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

Тип возвращаемого значения: STRUCT

Описание возвращаемого значения:

  • Возвращает структуру, содержащую все входные элементы; имена полей по умолчанию имеют формат col1, col2, col3, ...
  • Все поля допускают значения NULL

Использование​

  • Функция объединяет все входные элементы в структуру
  • Требуется хотя бы один параметр
  • Все поля помечаются как допускающие NULL

Примеры​

Примеры запросов:

Базовое использование: создание структуры с элементами разных типов и полями со значением NULL

select struct(1, 'a', "abc"),struct(null, 1, null),struct(cast('2023-03-16' as datetime));
+--------------------------------------+--------------------------------------+----------------------------------------+
| struct(1, 'a', "abc") | struct(null, 1, null) | struct(cast('2023-03-16' as datetime)) |
+--------------------------------------+--------------------------------------+----------------------------------------+
| {"col1":1, "col2":"a", "col3":"abc"} | {"col1":null, "col2":1, "col3":null} | {"col1":"2023-03-16 00:00:00"} |
+--------------------------------------+--------------------------------------+----------------------------------------+

Создание структуры, содержащей сложные типы:

select struct([1,2,3], {'name':'Alice','age':20}, named_struct('f1',1,'f2',2));
+----------------------------------------------------------------------------------+
| struct([1,2,3], {'name':'Alice','age':20}, named_struct('f1',1,'f2',2)) |
+----------------------------------------------------------------------------------+
| {"col1":[1, 2, 3], "col2":{"name":"Alice", "age":"20"}, "col3":{"f1":1, "f2":2}} |
+----------------------------------------------------------------------------------+

Создание структуры, содержащей IP-адреса:

select struct(cast('192.168.1.1' as ipv4), cast('2001:db8::1' as ipv6));
+------------------------------------------------------------------+
| struct(cast('192.168.1.1' as ipv4), cast('2001:db8::1' as ipv6)) |
+------------------------------------------------------------------+
| {"col1":"192.168.1.1", "col2":"2001:db8::1"} |
+------------------------------------------------------------------+

Примеры ошибок

При использовании неподдерживаемых типов возникает ошибка: Создание структуры, содержащей типы Json/Variant

select struct(v) from var_with_index;
ERROR 1105 (HY000): errCode = 2, detailMessage = struct does not support jsonb/variant type

select struct(cast(1 as jsonb)) from var_with_index;
ERROR 1105 (HY000): errCode = 2, detailMessage = struct does not support jsonb/variant type

При создании пустой структуры возникает ошибка: требуется хотя бы один параметр, что соответствует поведению hive:

select struct();
ERROR 1105 (HY000): errCode = 2, detailMessage = struct requires at least one argument, like: struct(1)