【问题标题】:Extract field based on any value in between values根据值之间的任何值提取字段
【发布时间】:2017-11-28 17:21:26
【问题描述】:

我有一个名为 pagename 的字段,格式如下:

tools|tools|tool|envestnet|results
tools|tools|tool|envestnet|inputs
tools|tools|tool|nikko|inputs
tools|tools|tool|nikko|results

tools|tools|tool name|ubs|results
tools|tools|tool name|ubs|inputs
tools|tools|tool name|iretire decum|results
tools|tools|tool name|iretire decum|inputs

等等..

我需要根据以下子句运行某个查询:

case when pagename like 'tools|tools|tool name%' then 'Tool Name'
when pagename like 'tools|tools|tool|%' then 'Tool'
else '' end page_name

但是这对我不起作用,因为它在记录中造成重复,因为 |inputs 和 |results by tool 的值通常相同。

如何根据以下情况进行案例陈述:

case when pagename like 'tools|tools|tool name|*|inputs' then 'Tool Name Inputs'
when pagename like 'tools|tools|tool|*|inputs' then 'Tool Inputs'
when pagename like 'tools|tools|tool name|*|results' then 'Tool Name Results'
when pagename like 'tools|tools|tool|*|results' then 'Tool Results'
else '' end page_name

哪里 * 可以是任何东西?

提前谢谢你。这是一个 Hive 问题,但我确信 SQL 解决方案在这里也适用。

【问题讨论】:

    标签: sql regex hive hiveql


    【解决方案1】:

    使用正则表达式rlike 而不是like| 应该被 \\ 屏蔽,因为它在正则表达式中有特殊的含义。 ^ - 表示字符串的开头,$ - 字符串的结尾。 .*? 是什么:

    case when pagename rlike '^tools\\|tools\\|tool name\\|.*?\\|inputs$' then 'Tool Name Inputs'
         when pagename rlike '^tools\\|tools\\|tool\\|.*?\\|inputs$' then 'Tool Inputs'
         when pagename rlike '^tools\\|tools\\|tool name\\|.*?\\|results$' then 'Tool Name Results'
         when pagename rlike '^tools\\|tools\\|tool\\|.*?\\|results$' then 'Tool Results'
    else '' end page_name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-14
      • 2021-05-22
      • 2013-12-24
      • 2017-02-16
      • 2014-11-17
      • 1970-01-01
      • 2019-04-17
      • 2017-04-09
      相关资源
      最近更新 更多