使用 BigQuery 将字符串拆分为列以提取值

Splitting the string into columns to extract values using BigQuery

如何按特定字符拆分字符串并提取每个字符的值。我的想法是,我需要提取行之间的每个单词,包括字符串的 start/end,因为此信息表示某些内容。有正则表达式模式吗?或者将信息拆分成列的方法?

Name
A|B|C|D|E|F|G


Name           col1  col2  col3  col4 col5   col6  col7
A|B|C|D|E|F|G   A     B     C     D     E      F    G

我正在为此使用 BigQuery,但找不到获取所有这些信息的方法。我尝试了正则表达式代码,它只适用于我们有 A|B|C 的情况。

我必须比较每个列的值,然后使用 case when

创建条件

代码:

select
  regexp_extract(name, "\w+\S(x|y)") as c2, -- gives either x or y
  left(regexp_substr(name, "\w+\S\w+\S\w+"),1) as c1, 
  right(regexp_extract(name, "\w+\S\w+\S\w+"),1) as c3 
from Table

这似乎是 SPLIT() 的一个用例。

select split(name,"|")[safe_offset(0)] as c1, split(name,"|")[safe_offset(1)] as c2, ..
from table

https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split

添加了 safe_offset 的使用,而不是每个

的偏移量

考虑以下方法

select * from (
  select *
  from  your_table, unnest(split(name, '|')) value with offset
)
pivot(any_value(value) as col for offset in (0,1,2,3,4,5,6))     

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