Один запрос улья, чтобы удалить определенный текст в данных - PullRequest
1 голос
/ 30 апреля 2020

У меня есть такие данные столбца в 2 форматах

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

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

Я хочу получить выходные данные как "/abc/testapp/v1?FirstName=username" и удалить данные, начинающиеся с «& Фамилия» и заканчивающиеся «». Идея состоит в том, чтобы удалить Фамилию с ее значением. Но если данные не содержат «& Lastname», то они также должны нормально работать согласно второму сценарию. Значение для Lastname, показанное в примере, равно «test123», но в целом это будет Dynami c

Я начал с regexp_replace, но я могу заменить «& Фамилия», но не его значение. select regexp_replace("/abc/testapp/v1?FirstName=username&Lastname=test123&type=en_US","&Lastname",""); Может кто-нибудь помочь здесь, как я могу добиться того и другого с помощью одного запроса улья?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Используйте функцию разделения:

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

Или используйте шаблон «& Фамилия» для разделения:

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

Это разрешит что-то еще с & кроме начинающегося с & Фамилия

1 голос
/ 30 апреля 2020

для обоих запросов с фамилией или без нее, она работает таким образом, используя split для улья, нет необходимости выбирать какую-либо таблицу, вы можете напрямую выполнить функцию, например 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

...