使用 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))
如果应用于您问题中的虚拟数据 - 输出为
如何按特定字符拆分字符串并提取每个字符的值。我的想法是,我需要提取行之间的每个单词,包括字符串的 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))
如果应用于您问题中的虚拟数据 - 输出为