【问题标题】:splitting a text string to matching columns in presto将文本字符串拆分为 presto 中的匹配列
【发布时间】:2019-07-29 12:31:31
【问题描述】:

我有一份来自 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))),"")

如果有帮助的话

【问题讨论】:

  • 可能的前缀集合是不是事先知道的?
  • 所有前缀都以 u 开头,后跟一个数字。数字上升到 60。所有不同的值都用分号分隔
  • 不以“u”开头的前缀怎么办?在上面的示例中,“c_pre”、“gtm”、“auiddc”、“~oref”。
  • 我还没有找到这些特定的用途,分析所需的都是以 ;u 后跟数字开头的

标签: presto


【解决方案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_map https://trino.io/docs/current/functions/map.html

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多