将文本字符串拆分为Presto中的匹配列



我有一个来自普雷斯托查询的报告,该报告在字符串中为我提供了信息

原始数据看起来像这样:

c_pre=CI2UhdX95uACFcKIdwodZ8QETQ;gtm=2od241;auiddc=*;u1=cz;u10=Not
Available;u11=Not Available;u12=1;u13=Not Available;u14=SGD;u15=Not
Available;u3=pdp;u4=undefined;u6=Not Available;~oref=https://www.bbc.com/

我找到了一个Excel解决方案,将其分为单独的列。附加屏幕截图

这个过程仍然需要很长时间才能完成,我希望使用Presto仪表板来自动化。

在上面的示例中,所有具有相同U前缀(U3,U13等)的项目都必须进入同一列,否则我只需进行字符串切片即可。不幸的是,不同的字符串根据存储的数据而产生不同的结果,从而在同一列中产生了不同的U前缀。ScreensHot显示为什么这会混淆

excel查询:

=IFERROR(
RIGHT(
INDEX(RD!2:2,1,
MATCH('Data LU'!A$1&"="&"*",RD!2:2,0)),
(LEN(
INDEX(RD!2:2,1,
MATCH('Data LU'!A$1&"="&"*",RD!2:2,0)))-(LEN(A$1)+1))),"")

如果有帮助

假设您知道所有可能的前缀的集合,则可以做这样的事情:

with t as (select split_to_map(<column>,';','=') map from <table>)
select
    element_at(map, 'u1') as u1,
    element_at(map, 'u2') as u2,
    element_at(map, 'u3') as u3,
    ...
from t

不幸的是,当前有(截至版本304)无法动态地将值爆炸到单独的列中。

您可以在此处找到split_to_mapelement_at的文档:https://trino.io/docs/current/functions/string.html#split_to_maphttps://trino.io/docs/current/functions/map.html

相关内容

  • 没有找到相关文章

最新更新