BigQuery - 从列中提取子字符串

问题描述 投票:0回答:2

我有一个名为“资产”的专栏,结果如下

//bigquery.googleapis.com/projects/ABC/datasets/123

//bigquery.googleapis.com/projects/BlaBla-something/datasets/12345

//bigquery.googleapis.com/projects/ProjectName/datasets/6789

我只想将第一列中的部分文本添加到另一列:在“//bigquery.googleapis.com/projects/”之后,并且不想将此部分放在 /datasets/123 中,因此在结果中我只想显示文本之间和名为“asset_code”的新列,如下所示:

**Result **

| assets                                                           | asset_code        | |//bigquery.is.com/projects/ABC/datasets/123                        |ABC                | |//bigquery.googleapis.com/projects/BlaBla-something/datasets/12345 |BlaBla-something   | |//bigquery.googleapis.com/projects/ProjectName/datasets/6789       |ProjectName        |

您能提供建议吗?

tried substr.   REGEXP_EXTRACT but got stucked split

google-bigquery split substring regexp-substr
2个回答
0
投票

如果你看到你提到的3个例子。代码始终位于第三个位置,您可以只使用 split 函数,不需要使用 REGEXP_EXTRACT 来获取值。下面是sql代码

select SPLIT(REPLACE('//bigquery.googleapis.com/projects/ProjectName/datasets/6789', '//', ''),'/')[OFFSET(2)] as assest_code

这是与列一起使用的 SQL 代码

select assets, SPLIT(REPLACE(assets, '//', ''),'/')[OFFSET(2)] as assest_code from table

0
投票

另请考虑以下方法

select assets, 
  regexp_extract(assets, r'//bigquery.googleapis.com/projects/(.*?)/') as asset_code
from your_table    

如果应用于您问题中的样本数据 - 输出为

© www.soinside.com 2019 - 2024. All rights reserved.