如何在ClickHouse中从Nullable(String)提取指定邮箱值
提取JSON数组中的邮箱值并关联ID的解决方法
假设你用的是ClickHouse(从Nullable(String)字段类型判断),可以通过以下SQL实现需求:
SELECT ID, JSONExtractString(array_element, 'value') AS email FROM your_table -- 先过滤掉空的my_array记录,避免解析报错 WHERE my_array IS NOT NULL -- 把JSON数组字符串解析成数组,并展开每个元素为单独行 ARRAY JOIN JSONExtractArray(my_array) AS array_element -- 可选:过滤出符合邮箱格式的记录,避免无效值 WHERE JSONExtractString(array_element, 'value') LIKE '%@%.%'
关键步骤说明:
JSONExtractArray(my_array):将字符串类型的JSON数组解析为ClickHouse原生数组类型,方便后续展开。ARRAY JOIN:把数组中的每个JSON对象元素拆分成单独的行,这样每个ID就能对应其数组里的每一个邮箱。JSONExtractString(array_element, 'value'):从每个JSON对象中提取value字段,也就是你需要的邮箱地址。- 最后的
WHERE子句是可选校验,通过LIKE '%@%.%'过滤出符合基本邮箱格式的记录,避免提取无效内容。
如果你的my_array存在格式不规范的情况(比如不是合法JSON数组),可以用try()函数包裹解析逻辑,防止查询中断:
SELECT ID, JSONExtractString(array_element, 'value') AS email FROM your_table WHERE my_array IS NOT NULL ARRAY JOIN try(JSONExtractArray(my_array)) AS array_element WHERE JSONExtractString(array_element, 'value') LIKE '%@%.%'
内容的提问来源于stack exchange,提问作者Alex5672
相关产品推荐
相关产品推荐

