代码之家  ›  专栏  ›  技术社区  ›  Regressor

如何在配置单元中获取管道分隔符之后的第n个字符串

  •  0
  • Regressor  · 技术社区  · 6 年前

    我在hive中有一个表,我想从其中一列中提取字符串的第5个组件,如下所示-

    样本数据

    john:12|doe|google|usa|google.com|newspaper - title - 1 - volume - 1234|360671191
    john:34|doe|fb|usa|google.com|newspaper - title - X - volume - 1233|360671192
    john:45|doe|twitter|usa|google.com|newspaper - title - Y - volume - 1232|360671193
    jane:45:1323
    

    我想解析第一个管道字符()之后的第五个字符串。输出列的值为-

    newspaper - title - 1 - volume - 1234
    newspaper - title - X - volume - 1233
    newspaper - title - Y - volume - 1232
    jane:45:1323
    

    如果标题不存在(如记录4中所示),则按原样返回原始字符串。

    0 回复  |  直到 6 年前
        1
  •  0
  •   leftjoin    6 年前

    使用split函数,如下所示:

    with your_data as (
    select stack(4,
    'john:12|doe|google|usa|google.com|newspaper - title - 1 - volume - 1234|360671191',
    'john:34|doe|fb|usa|google.com|newspaper - title - X - volume - 1233|360671192',
    'john:45|doe|twitter|usa|google.com|newspaper - title - Y - volume - 1232|360671193',
    'jane:45:1323'
    ) as str
    )
    
    select nvl(splitted_str[5], original_str) result
     from
    (
    select split(str,'\\|') splitted_str, str original_str 
      from your_data
    )s;
    

    返回:

    newspaper - title - 1 - volume - 1234   
    newspaper - title - X - volume - 1233   
    newspaper - title - Y - volume - 1232   
    jane:45:1323