跳到主要内容

STRUCT_ELEMENT

描述​

返回 struct 数据列内的某一 field

语法​

STRUCT_ELEMENT( <struct>, '<filed_location>/<filed_name>')

参数​

参数说明
<struct>输入的 struct 列,如果是 null,则返回 null
<filed_location>field 的位置,起始位置从 1 开始,仅支持常量
<filed_name>field 的名字,仅支持常量,大小写敏感

返回值​

返回指定的 field 列,类型为任意类型

举例​

select struct_element(named_struct('f1', 1, 'f2', 'a'), 'f2'),struct_element(named_struct('f1', 1, 'f2', 'a'), 1);
+--------------------------------------------------------+-----------------------------------------------------+
| struct_element(named_struct('f1', 1, 'f2', 'a'), 'f2') | struct_element(named_struct('f1', 1, 'f2', 'a'), 1) |
+--------------------------------------------------------+-----------------------------------------------------+
| a | 1 |
+--------------------------------------------------------+-----------------------------------------------------+
CREATE TABLE test_struct (
id INT,
struct_col STRUCT<f1: BIGINT, f2: BIGINT, f3: BIGINT, f4: BIGINT, f5: BIGINT>
) DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");

INSERT INTO test_struct VALUES
(1, NAMED_STRUCT('f1', 1, 'f2', 2, 'f3', 3, 'f4', 4, 'f5', 5)),
(2, NAMED_STRUCT('f1', 1, 'f2', 1000, 'f3', 10000000, 'f4', 100000000000, 'f5', 100000000000)),
(3, NAMED_STRUCT('f1', 5, 'f2', 4, 'f3', 3, 'f4', 2, 'f5', 1)),
(4, NULL),
(5, NAMED_STRUCT('f1', 1, 'f2', NULL, 'f3', 3, 'f4', NULL, 'f5', 5));

SELECT struct_col, STRUCT_ELEMENT(struct_col, 'f1') AS f1
FROM test_struct
ORDER BY id;
+--------------------------------------------------------------------------+------+
| struct_col | f1 |
+--------------------------------------------------------------------------+------+
| {"f1":1, "f2":2, "f3":3, "f4":4, "f5":5} | 1 |
| {"f1":1, "f2":1000, "f3":10000000, "f4":100000000000, "f5":100000000000} | 1 |
| {"f1":5, "f2":4, "f3":3, "f4":2, "f5":1} | 5 |
| NULL | NULL |
| {"f1":1, "f2":null, "f3":3, "f4":null, "f5":5} | 1 |
+--------------------------------------------------------------------------+------+