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

时间:2019-03-07 15:02:38

标签: presto

我有一个来自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解决方法,可以将其拆分为单独的列。 screenshot attached for reference

此过程仍然需要花费很长的时间,我希望使用presto仪表板使其自动化。

所有具有相同u前缀(在上面的示例中为u3,u13等)的项目都必须进入同一列,否则我只会做一个字符串切片。不幸的是,根据存储的数据,不同的字符串会有不同的结果,从而导致同一列中的u前缀不同。Screenshot to show why this is confusing

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))),"")

如果有帮助

1 个答案:

答案 0 :(得分:2)

假设您知道所有可能的前缀的集合,则可以执行以下操作:

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://prestosql.io/docs/current/functions/string.html#split_to_map https://prestosql.io/docs/current/functions/map.html