从字段 sql/presto 中提取子字符串
Extract substrings from field sql/presto
我的数据库中有列包含以 / 分隔的值。我正在尝试从列中提取某些值并用它们创建新行。
数据示例如下所示;
user/values2/class/year/subject/18/9/2000291.csv
holiday/booking/type/1092/1921/1.csv
drink/water/juice/1/232/89.json
drink/water1/soft/90091/2/89.csv
car/type/1/001/1.json
game/mmo/1/2/3.json
我想从数据中提取最后 3 个数字,例如来自
user/values2/class/year/subject/18/9/2000291.csv
我要
x = 18
y = 9
z = 200291
并显示这些是 table 中的新字段。
我一直在研究和使用 presto 查询,但无法弄清楚如何实现我想要的。我在下面写了查询,但无法让它工作。
SELECT origin
split_part(origin, '.' & '/', 1) as z,
split_part(origin, '.' & '/', 2) as y,
split_part(origin, '.' & '/', 3) as x,
FROM "data_customer";
已编辑
当前 table
期望的结果
Presto 代码:
with your_data as(
select * from (values
'user/values2/class/year/subject/18/9/2000291.csv',
'holiday/booking/type/1092/1921/1.csv',
'drink/water/juice/1/232/89.json',
'drink/water1/soft/90091/2/89.csv',
'car/type/1/001/1.json',
'game/mmo/1/2/3.json'
)s (origin)
)
select s.origin, origin_splitted[3] x, origin_splitted[2] y, regexp_extract(origin_splitted[1],'\d*') z
from
(
select s.origin, reverse(split(s.origin,'/')) origin_splitted from your_data s
)s
结果:
origin x y z
user/values2/class/year/subject/18/9/2000291.csv 18 9 2000291
holiday/booking/type/1092/1921/1.csv 1092 1921 1
drink/water/juice/1/232/89.json 1 232 89
drink/water1/soft/90091/2/89.csv 90091 2 89
car/type/1/001/1.json 1 1 1
game/mmo/1/2/3.json 1 2 3
如有必要,将相同的 regexp_extract 应用于 x 和 y 列,或者可以应用另一个拆分来代替 regexp_extract,希望你明白了
我的数据库中有列包含以 / 分隔的值。我正在尝试从列中提取某些值并用它们创建新行。
数据示例如下所示;
user/values2/class/year/subject/18/9/2000291.csv
holiday/booking/type/1092/1921/1.csv
drink/water/juice/1/232/89.json
drink/water1/soft/90091/2/89.csv
car/type/1/001/1.json
game/mmo/1/2/3.json
我想从数据中提取最后 3 个数字,例如来自
user/values2/class/year/subject/18/9/2000291.csv
我要
x = 18
y = 9
z = 200291
并显示这些是 table 中的新字段。
我一直在研究和使用 presto 查询,但无法弄清楚如何实现我想要的。我在下面写了查询,但无法让它工作。
SELECT origin
split_part(origin, '.' & '/', 1) as z,
split_part(origin, '.' & '/', 2) as y,
split_part(origin, '.' & '/', 3) as x,
FROM "data_customer";
已编辑
当前 table
期望的结果
Presto 代码:
with your_data as(
select * from (values
'user/values2/class/year/subject/18/9/2000291.csv',
'holiday/booking/type/1092/1921/1.csv',
'drink/water/juice/1/232/89.json',
'drink/water1/soft/90091/2/89.csv',
'car/type/1/001/1.json',
'game/mmo/1/2/3.json'
)s (origin)
)
select s.origin, origin_splitted[3] x, origin_splitted[2] y, regexp_extract(origin_splitted[1],'\d*') z
from
(
select s.origin, reverse(split(s.origin,'/')) origin_splitted from your_data s
)s
结果:
origin x y z
user/values2/class/year/subject/18/9/2000291.csv 18 9 2000291
holiday/booking/type/1092/1921/1.csv 1092 1921 1
drink/water/juice/1/232/89.json 1 232 89
drink/water1/soft/90091/2/89.csv 90091 2 89
car/type/1/001/1.json 1 1 1
game/mmo/1/2/3.json 1 2 3
如有必要,将相同的 regexp_extract 应用于 x 和 y 列,或者可以应用另一个拆分来代替 regexp_extract,希望你明白了