在bigquery中将每6个字符的列拆分为行

6xfqseft  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(326)

这个问题在这里已经有答案了

如何拆分每6个字符的列数据并在bigquery中形成一行(2个答案)
上个月关门了。
作为gcp迁移的一部分,我需要将简单的spark语句迁移到bigquery中。一个表包含两列,需要根据spark语句将它们拆分为bigquery。
Spark中:
t1 = spark.sql("select col1,col2 from db.table") df1 = t1.withColumn("col2",explode(split(col("col2"), "(?<=\\G......)"))).withColumn("col2",trim(col("col2"))) 输入表:

+----+----------------------+
|col1|                  col2|
+----+----------------------+
|d1|X11   F11   1000KG123456|
|d2|X22   F22   3500Kabcdefgh|

预期产量:

+------------+
|col1|col2|
+------------+
|d1|     X11|
|d1|     F11|
|d1|  1000KG|
|d1|  123456|
|d2|     X22|
|d2|     F22|
|d2|  3500Ka|
|d2|  bcdefg|
|d2|       h|

实际上col2的值很大“x11 f11 1000kg123456…………”。在col2中,我们需要考虑每个6个字符的数据。我尝试了几个问题,但没有成功。有人能建议相关的bigquery转换spark语句吗?请求建议泛型查询,因为我有很多记录。

omtl5h9j

omtl5h9j1#

使用unnest和split:

with mytable as (
  select 'd1' as col1, 'X11   F11   1000KG...' as col2 union all
  select 'd2', 'X22   F22   3500K...'
)
select col1, rtrim(rtrim(c2, 'G...'), '...')
from mytable, unnest(split(col2, '   ')) as c2

相关问题