来自字符串化数组的正则表达式
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 |
+----+-----+-----+-----+
如何从字符串化数组中提取正则表达式值?
示例数据:
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 |
+----+-----+-----+-----+