Получение строки после последней косой черты в BigQuery Standard SQL - PullRequest
0 голосов
/ 31 октября 2018

Допустим, у меня есть столбец с именем Youtube, и я хочу извлечь строку после последней косой черты URL. Как бы я сделал это в BigQuery Standard SQL?

Примеры:

https://youtube.com/user/HaraldSchmidtShow

https://youtube.com/user/applesofficial

https://youtube.com/user/GrahamColton

По сути, я хочу:

HaraldSchmidtShow

applesofficial

GrahamColton

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Альтернатива предыдущему ответу, которая также работает, когда в конце есть '/':

WITH data AS(
  SELECT 'https://youtube.com/user/HaraldSchmidtShow' AS url UNION ALL
  SELECT 'https://youtube.com/user/applesofficial' UNION ALL
  SELECT 'https://youtube.com/user/GrahamColton' UNION ALL
  SELECT 'https://youtube.com/user/GrahamColton/'
)

SELECT REGEXP_EXTRACT(url, r'/([^/]+)/?$') name
FROM `data`
0 голосов
/ 01 ноября 2018

Ниже для BigQuery Standard SQL

#standardSQL
SELECT url, 
  (SELECT v FROM UNNEST(SPLIT(url, '/')) v WITH OFFSET o 
    WHERE v != '' ORDER BY o DESC LIMIT 1
  ) last_string
FROM `data`  

Вы можете протестировать, поиграть с выше, используя фиктивные данные как

#standardSQL
WITH data AS(
  SELECT 'https://youtube.com/user/HaraldSchmidtShow' AS url UNION ALL
  SELECT 'https://youtube.com/user/applesofficial' UNION ALL
  SELECT 'https://youtube.com/user/GrahamColton/' UNION ALL
  SELECT 'youtube.com/channel/UCEDBbJXgUqRQXCOsluJJ0FQ'
)
SELECT url, 
  (SELECT v FROM UNNEST(SPLIT(url, '/')) v WITH OFFSET o 
    WHERE v != '' ORDER BY o DESC LIMIT 1
  ) last_string
FROM `data`

с результатом

Row url                                             last_string  
1   https://youtube.com/user/HaraldSchmidtShow      HaraldSchmidtShow    
2   https://youtube.com/user/applesofficial         applesofficial   
3   https://youtube.com/user/GrahamColton/          GrahamColton     
4   youtube.com/channel/UCEDBbJXgUqRQXCOsluJJ0FQ    UCEDBbJXgUqRQXCOsluJJ0FQ     

Очевидно, что использование функций регулярных выражений, как в ответе Фелипе, - более элегантно и легче для чтения.
Но в некоторых случаях использование вышеприведенного подхода все еще имеет практическую ценность, поэтому я хотел привести его к этому посту

0 голосов
/ 31 октября 2018

Это может уже помочь вам:

WITH data AS(
  SELECT 'https://youtube.com/user/HaraldSchmidtShow' AS url UNION ALL
  SELECT 'https://youtube.com/user/applesofficial' UNION ALL
  SELECT 'https://youtube.com/user/GrahamColton'
)

SELECT
  SPLIT(url, '/')[SAFE_OFFSET(ARRAY_LENGTH(SPLIT(url, '/')) - 1)] AS name
FROM `data`

Он просто разбивает строку и переходит к последнему значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...