Ниже приведен еще один простой вариант для BigQuery Standard SQL (на основе использования функции REPEAT)
#standardSQL
SELECT id, value
FROM `project.dataset.table` t,
UNNEST(SPLIT(REGEXP_REPLACE(t.values, r'\[|]', ''))) x,
UNNEST(SPLIT(REPEAT(
CONCAT(',', SPLIT(x, '*')[OFFSET(0)]),
IFNULL(CAST(SPLIT(x, '*')[SAFE_OFFSET(1)] AS INT64), 1)
))) value
WHERE value != ''
Вы можете протестировать, поиграть с приведенными выше примерами данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 AS id, '[5*2,8,6]' AS `values` UNION ALL
SELECT 2, '[5*2,0*3]' UNION ALL
SELECT 3, '[1*1,2,5,6]'
)
SELECT id, value
FROM `project.dataset.table` t,
UNNEST(SPLIT(REGEXP_REPLACE(t.values, r'\[|]', ''))) x,
UNNEST(SPLIT(REPEAT(
CONCAT(',', SPLIT(x, '*')[OFFSET(0)]),
IFNULL(CAST(SPLIT(x, '*')[SAFE_OFFSET(1)] AS INT64), 1)
))) value
WHERE value != ''
с результатом
Row id value
1 1 5
2 1 5
3 1 8
4 1 6
5 2 5
6 2 5
7 2 0
8 2 0
9 2 0
10 3 1
11 3 2
12 3 5
13 3 6