更新时间:2025-08-25 GMT+08:00
复杂类型
DataArtsFabric SQL支持从orc/parquet文件中读取复杂类型列,当前仅支持读取,且仅支持转换为jsonb类型。
复杂类型DDL
当前DDL仅支持STRUCT和ARRAY类型。
定义语法如下:
- ARRAY:定义语法为ARRAY<data_type>。
- STRUCT:定义语法为STRUCT<col_name : data_type, ...>。
其中data_type表示数据类型,可以是基础类型和复杂类型,基础类型请参见与LakeFormation数据类型映射关系。
DDL示例:
1 2 3 4 5 6 7 8 9 10 |
-- 创建包含复杂类型的external表 CREATE EXTERNAL TABLE test_table ( name TEXT, address STRUCT<city:TEXT, zip:INT>, tags ARRAY<TEXT>, logs ARRAY<STRUCT<term:TEXT, time:TIMESTAMP>> ) store as orc location 'obs://test/test1'; -- 建表后,对应列会显示jsonb(为转换后类型,LakeFormation存储着完整定义) DESCRIBE test_table; |
复杂类型转jsonb
当前复杂类型包括STRUCT和ARRAY通过JSON的方式读取,用户在读取数据以后需要显式转换为对应的数据类型。
DQL示例(jsonb完整操作符和函数说明请参见JSON/JSONB函数和操作符):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
-- -> 通过键或索引提取 JSON 对象或数组的元素 SELECT name, address, tags, logs->0->'term' FROM test_table; name | address | tags | ?column? ---------+---------------------------------------+-------------------------+------------ Alice | {"zip": 10001, "city": "New York"} | ["friend", "colleague"] | "login" Bob | {"zip": 90001, "city": "Los Angeles"} | ["family"] | "purchase" Charlie | {"zip": 60601, "city": "Chicago"} | ["friend", "hobby"] | (3 rows) -- ->> 提取元素并转为 text SELECT name, address FROM test_table WHERE address->>'zip' = '10001'; name | address -------+------------------------------------ Alice | {"zip": 10001, "city": "New York"} (1 row) -- @> 数组包含元素,左侧数组包含右侧数组内全部元素 SELECT name, tags FROM test_table WHERE tags @> '["friend"]'::jsonb; name | tags ---------+------------------------- Alice | ["friend", "colleague"] Charlie | ["friend", "hobby"] (2 rows) -- 类型显示转换,先使用 ->> 获取为字符,再进行类型转换 SELECT (logs->0->>'time')::TIMESTAMP FROM test_table; timestamp --------------------- 2024-01-01 00:00:00 2024-02-15 00:00:00 (3 rows) |
父主题: 数据类型