I'm trying to manipulate this;
id | data
1 | [[item1,2,1.99],[item2,1,4.99]]
2 | [[item1,2,1.99]]
into this:
id | A | B | C |
1 | item1 | 2 | 1.99 |
| item2 | 1 | 4.99 |
2 | item1 | 2 | 1.99 |
...'
The closest I got is;
id | data |
1 | item1, 2, 1.99 |
| item2, 1, 4.99 |
2 | item1, 2, 1.99 |
How do I split that array of strings into columns?
Here's my current query;
SELECT
id,
ARRAY(SELECT * FROM UNNEST(SPLIT(SUBSTR(line_items, 3 , LENGTH(line_items) - 4),'], [')) AS line_items) AS line_items
FROM raw_data.sales
This query does the same;
SELECT
id,
SPLIT(SUBSTR(line_items, 3 , LENGTH(line_items) - 4),'], [') AS line_items
FROM raw_data.sales
Solution
SELECT
ID id,
ARRAY_AGG(STRUCT(SPLIT(A, ',')[OFFSET(0)] AS A,
SPLIT(A, ',')[OFFSET(1)] AS B,
SPLIT(A, ',')[OFFSET(2)] AS C))
FROM
TABLE t,
UNNEST(SPLIT(SUBSTR(DATA, 3 , LENGTH(DATA) - 4),'],[')) A
GROUP BY id
