如何拆分每 6 个字符的列数据并在 BigQuery 中形成一行
Posted
技术标签:
【中文标题】如何拆分每 6 个字符的列数据并在 BigQuery 中形成一行【英文标题】:how to split column data for each 6 chars and to form a rows in BigQuery 【发布时间】:2021-03-18 04:27:41 【问题描述】:我需要将列数据拆分为每 6 个字符。
Input:
+----+----------------------+
|col1| col2|
+----+----------------------+
|d1|X11 F11 1000KG123456|
|d2|X22 F22 3500Kabcdefgh|
Expecting:
+------------+
|col1|col2|
+------------+
|d1| X11|
|d1| F11|
|d1| 1000KG|
|d1| 123456|
|d2| X22|
|d2| F22|
|d2| 3500Ka|
|d2| bcdefg|
|d2| h|
我需要一个通用查询而不是硬编码查询。我的表中有大量数据。 我试过下面的查询它没有用。
with mytable as
(select col1,col2 from `table_name`)
select col1, c2
from mytable, unnest(SPLIT(col2, '(?<=\\G......)')) as c2
其中 '(?
【问题讨论】:
你知道col2
中最多可以包含多少个字符吗?
截至目前 1146,它也可能有所不同。
您必须在数据库内部进行此清理,还是可以在其他地方进行?
这不是为了任何清理。拆分此表后,我需要加入另一个表,因为它包含 6 个字符作为键。这是为了进一步的功能验证。
是的,它是一种清理,为了得到你想要的规范化表,你需要做一些清理。因此,我上面的问题,你没有回答。
【参考方案1】:
尝试以下查询,它会按预期工作
with mytable as
(select col1,col2 from `table_name`)
select col1, c2
from mytable, unnest(REGEXP_EXTRACT_ALL(string_field_1, '.6')) as c2
更多详情请参考
https://github.com/google/re2/wiki/Syntax
https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#regexp_extract_all
【讨论】:
您好 SANN3,非常感谢您的帮助,您的查询绝对适合我的要求。 @Rajasekhar888 - 不确定您所说的“合适”是什么意思,但它肯定不会返回预期结果 - 行|d2| h|
丢失。查看我的正确查询答案
实际上我的数据正确拆分以容纳 6 个字符。所以没有发现区别。再次感谢您的回复。【参考方案2】:
考虑下面
select col1, col2
from `project.dataset.table`,
unnest(regexp_extract_all(col2, r'.1,6')) col2
如果应用于您问题中的样本数据 - 输出是
【讨论】:
你有没有机会尝试看看有什么不同?以上是关于如何拆分每 6 个字符的列数据并在 BigQuery 中形成一行的主要内容,如果未能解决你的问题,请参考以下文章