【问题标题】:Single hive query to remove certain text in data单个配置单元查询以删除数据中的某些文本
【发布时间】:2020-08-14 09:10:17
【问题描述】:

我有这样的列数据,有两种格式

1)"/abc/testapp/v1?FirstName=username&Lastname=test123"

2)"/abc/testapp/v1?FirstName=username"

我想将输出检索为 "/abc/testapp/v1?FirstName=username" 并删除以“&Lastname”开头并以“”结尾的数据。想法是删除 Lastname 及其值。 但是,如果数据不包含“&Lastname”,那么它也应该按照第二种情况正常工作 示例中显示的 Lastname 的值为“test123”,但通常这是动态的

我从 regexp_replace 开始,但我可以替换“&Lastname”,但不能替换它的值。 select regexp_replace("/abc/testapp/v1?FirstName=username&Lastname=test123&type=en_US","&Lastname",""); 有人可以在这里帮助我如何通过一个配置单元查询来实现这两个目标吗?

【问题讨论】:

  • 这是你想要的输出吗?
  • 我们不能将 LastName 的值硬编码为 "&Lastname=test123" ...在示例中,我给出了 "test123" 作为值,但通常它可以是任何值。编辑我的问题

标签: sql hadoop hive hiveql


【解决方案1】:

使用拆分功能:

with your_data as (--Use your table instead of this example
select stack (2,
              "/abc/testapp/v1?FirstName=username&Lastname=test123",
              "/abc/testapp/v1?FirstName=username"
             ) as str
)

select split(str,'&')[0] from your_data;

结果:

_c0
/abc/testapp/v1?FirstName=username
/abc/testapp/v1?FirstName=username

或者使用 '&Lastname' 模式进行拆分:

select split(str,'&Lastname')[0] from your_data;

除了以 &Lastname 开头之外,它将允许使用 & 的其他内容

【讨论】:

    【解决方案2】:

    对于有或没有姓氏的查询,它以这种方式工作,使用split for hive 不需要任何表来选择你可以直接执行类似select functionname 的函数

    select    
    split("/abc/testapp/v1FirstName=username&Lastname=test123",'&')[0]
    
    select    
    split("/abc/testapp/v1FirstName=username",'&')[0]
    

    结果:

     _c0
        /abc/testapp/v1FirstName=username
    

    您可以进行单个查询:

    select    
    split("/abc/testapp/v1FirstName=username&Lastname=test123",'&')[0],
    split("/abc/testapp/v1FirstName=username",'&')[0]
    
     _c0                                        _c1
        /abc/testapp/v1FirstName=username    /abc/testapp/v1FirstName=username
    
    

    【讨论】:

    • 你好 @Ram 我们不能将 LastName 的值硬编码为 "&Lastname=test123" ...在示例中,我将 "test123" 作为值,但通常它可以是任何值
    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    相关资源
    最近更新 更多