来自字符串化数组的正则表达式

Regex from stringified-array

如何从字符串化数组中提取正则表达式值?

示例数据:

with data as (select 1 as id, '["abc_def_123","uvw_xyz_456"]'::string as my_field)
select * from data

my_field 最多可以有 4 个项目(如果重要的话)。

期望的输出:

--------------------------------
|  id  |  f1   |  f2   |  f3   |
--------------------------------
|  1   |  abc  |  def  |  123  |
|  1   |  uvw  |  xyz  |  456  |
--------------------------------

试试下面的方法:

with data as (
    select 1 as id, '["abc_def_123","uvw_xyz_456"]'::string as my_field
),
json_data as (
    select id, parse_json(my_field) as json from data
),
flattened_data as (
    SELECT id, split(f.value::string, '_') as splitted_c
    FROM json_data,
    lateral flatten(input => json_data.json) f   
)
SELECT 
    id, 
    splitted_c[0]::string as f1, 
    splitted_c[1]::string as f2, 
    splitted_c[2]::string as f3
from flattened_data;

结果:

+----+-----+-----+-----+
| ID | F1  | F2  | F3  |
|----+-----+-----+-----|
|  1 | abc | def | 123 |
|  1 | uvw | xyz | 456 |
+----+-----+-----+-----+