在BigQuery Standard SQL中的Last Slash之后获取字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在BigQuery Standard SQL中的Last Slash之后获取字符串相关的知识,希望对你有一定的参考价值。

假设我有一个名为'Youtube'的列,我想在URL的最后一个斜杠之后提取字符串。我如何在BigQuery Standard SQL中执行此操作?

例子:

https://youtube.com/user/HaraldSchmidtShow

https://youtube.com/user/applesofficial

https://youtube.com/user/GrahamColton

基本上,我想:

HaraldSchmidtShow

applesofficial

GrahamColton
答案

前一个答案的替代方案,当最后有一个'/'时也可以使用:

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`
另一答案

这可能已经为你做了诀窍:

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`

它只是拆分字符串并转到最后一个值。

另一答案

以下是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     

显然,使用正如Felipe的答案中的正则表达式函数 - 更优雅,更易于阅读。 但在某些情况下使用上述方法仍然具有实用价值,所以我想把它带到那篇文章

以上是关于在BigQuery Standard SQL中的Last Slash之后获取字符串的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery Standard Sql 等效于 Legacy Sql 中的 GROUP_CONCAT_UNQUOTED

有没有办法在BigQuery Standard SQL中解析XML标签?

Bigquery (Standard Sql) - 年月日期格式

使用外部 UDF 库运行 BigQuery Standard SQL

有没有办法在 BigQuery Standard SQL 中解析 XML 标签?

什么 DataGrip SQL Dialect 最接近 BigQuery STANDARD SQL (SQL 2011)