La domanda su come suddividere un campo (ad esempio una stringa CSV) in più righe è già stata risolta: Split values over multiple rows.Dividi valori su più righe in RedShift
Tuttavia, questa domanda si riferisce a MSSQL e le risposte utilizzano varie funzionalità per le quali non esistono equivalenti di RedShift.
Per ragioni di completezza, ecco un esempio di quello che mi piacerebbe fare:
dati attuale:
| Key | Data |
+-----+----------+
| 1 | 18,20,22 |
| 2 | 17,19 |
dati richiesti:
| Key | Data |
+-----+----------+
| 1 | 18 |
| 1 | 20 |
| 1 | 22 |
| 2 | 17 |
| 2 | 19 |
Ora, posso suggerisci una soluzione per il caso di un numero limitato di elementi nel campo CSV: usa split_part e union su tutte le possibili posizioni dell'array, ad esempio:
SELECT Key, split_part(Data, ',', 1)
FROM mytable
WHERE split_part(Data, ',', 1) != ""
UNION
SELECT Key, split_part(Data, ',', 2)
FROM mytable
WHERE split_part(Data, ',', 2) != ""
-- etc. etc.
Tuttavia, questo è ovviamente molto inefficiente e non funzionerebbe per elenchi più lunghi.
Qualche idea migliore su come farlo?
EDIT:
C'è anche una domanda in qualche modo simile per quanto riguarda le righe si moltiplicano: splitting rows in Redshift. Tuttavia, non vedo come questo approccio possa essere applicato qui.
EDIT 2:
Una possibile duplicato: Redshift. Convert comma delimited values into rows. Ma niente di nuovo - la risposta di @Masashi Miyazaki è simile al mio suggerimento sopra, e soffre degli stessi problemi.
Vedi http://stackoverflow.com/questions/25112389/redshift-convert-comma-delimited-values-into-rows/31998832 # 31998832 –
Si prega di vedere una risposta valida per questa domanda qui. [https://stackoverflow.com/questions/46784721/redshift-split-single-dynamic-column-into-multiple-rows-in-new-table/46785509#46785509](https://stackoverflow.com/questions/ 46784721/redshift-split-single-dynamic-column-in-multiple-rows-in-new-table/46785509 # 46785509) –
@JonScott, questo sembra buono. Lo inquadrerai come risposta in modo che io possa risolvere? – etov