DuckDB中转换类列表字符串:有无替代嵌套替换+STRING_SPLIT的更优方法?
处理DuckDB中类JSON列表字符串的简洁方法
不用嵌套REPLACE再拆分,DuckDB原生支持JSON解析函数,直接用这些函数才是更规范简洁的做法:
方法1:将JSON数组展开为多行
如果需要把数组里的每个元素单独成行,用JSON_EXTRACT_ARRAY_ELEMENTS_TEXT函数,直接解析JSON格式的字符串:
SELECT original_id, JSON_EXTRACT_ARRAY_ELEMENTS_TEXT(json_list_col) AS single_item FROM your_table;
比如原列值是["Value1","Value2","Valueetc"],执行后会生成3行,每行对应一个元素。
方法2:将字符串转为DuckDB的LIST类型
如果要保留原行,把JSON字符串直接转成DuckDB原生的LIST类型,方便后续用LIST相关函数操作,用FROM_JSON并指定目标类型:
SELECT *, FROM_JSON(json_list_col, 'LIST(VARCHAR)') AS converted_list FROM your_table;
转换后converted_list就是标准的LIST类型,可以直接用LIST_LENGTH(converted_list)获取长度,LIST_CONTAINS(converted_list, 'Value2')判断是否包含某个值,比手动拆分灵活得多。
为什么比手动替换好
- 不用处理复杂的字符替换逻辑,避免元素里包含逗号、引号等特殊字符时出错(比如元素是
["Val,ue1","Val\"ue2"],手动替换会直接失效) - 完全符合JSON规范,代码可读性更高
- 支持后续直接使用DuckDB的LIST/JSON函数,扩展性更强
内容的提问来源于stack exchange,提问作者Constantine Kokkinos
相关产品推荐
相关产品推荐

