Разрезание данных через запятую и сохранение в собственном столбце - PullRequest
0 голосов
/ 08 мая 2018

Прямо сейчас у меня есть куча данных, хранящихся в поле, и это серия чисел, разделенных запятыми:

ID      Values 

235077  8185,8186,8187,8188,8189,8190,8191,9241,9244,9245,1,2,3,4,5,9
246576  1,2,3,4,5,9
114507  1,2,3,4,5,6,9
256493  8166,8167,8168,8169,8170,8171,8172,20198,20201,20202,20204,20205,20207,20209,1,2,3,4,5,9
256518  1,2,3,4,5,6,9
234587  1,2,3,4,5,9
256513  1,2,3,4,5,9
242822  8166,8167,8168,8169,8170,8171,8172,20198,20201,20202,20204,20205,20207,20209,1,2,3,4,5,9
256510  1,2,3,4,5,9
183173  1,2,3,4,5,9
256463  8185,8186,8187,8188,8189,8190,8191,9241,9244,9245,1,2,3,4,5,9
255102  1,2,3,4,5,9
253850  1559,1560,1561,1562,2728,1,2,3,4,5,9
240286  9239,9242,1,2,3,4,5,8
64154   1,2,3,4,5,9
232844  1,2,3,4,5,9
246571  4317,1,2,3,4,5,9

Что я хотел бы сделать, так это манипулировать данными таким образом, чтобы я мог не только разделить значения, но и вытянуть их все в один столбец, соответствующий их идентификаторам. Итак, используя 64154 в качестве примера:

ID     Values
65414     1
65414     2
65414     3
65414     4
65414     5
65414     9

Я уверен, что это будет связано с некоторой функцией Regex, но с точки зрения каскадирования данных описанным выше способом я потерял.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Просто используйте функцию UNNEST (). Это встроенная функция в PostgreSQL, которая позволяет разбивать массивы на строки для каждого элемента массива, как показано ниже:

SELECT
id
, UNNEST(values)
FROM a_table

Это исключает необходимость выполнения бокового соединения и т. Д.

0 голосов
/ 08 мая 2018

Примечание. Этот вопрос был помечен Postgres, когда я на него ответил.

В Postgres это легко.Вы можете использовать боковое соединение:

select t.id, r.val
from t, lateral
     regexp_split_to_table(v.x, ',' ) r(val);

Я не думаю, что Redshift обладает такой функциональностью.

...