Я хочу превратить закодированный JSON список в собственный массив BigQuery, в идеале это будет список кортежей или словарей со значениями и позициями.Отсюда ссылка на функциональность перечисления Python.
т.е.
[(idx, elem) for idx, elem in enumerate(json_list_string)]
[{'pos':idx, 'value':elem} for idx, elem in enumerate(json_list_string)]
Первая часть превращения json в массив, который я уже решил, используя этот вопрос
Редактировать:
WITH
my_ids AS (
SELECT 'xyz' as grp, '["7f9f98fh9g4ef393d3h5", "chg3g33f26949hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' as ids
UNION ALL
SELECT 'abc' as grp, '["7f9f98fh9g4ef393d3h5", "chg3g33fdsfsdfs49hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' as ids
)
SELECT
*
FROM my_ids
В идеальном мире я получу вывод наподобие:
xyz, 7f9f98fh9g4ef393d3h5, 1
xyz, chg3g33f26949hg6067d, 2
...
abc, 946637g145h48322686f, 6
Обратите внимание, что списки могут быть довольно длинными(до 24 записей, и я не хочу жестко кодировать все пути)
Edit2: (возможное решение)
WITH
my_ids AS (
SELECT 'xyz' as grp, '["7f9f98fh9g4ef393d3h5", "chg3g33f26949hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' as ids
UNION ALL
SELECT 'abc' as grp, '["7f9f98fh9g4ef393d3h5", "chg3g33fdsfsdfs49hg6067d", "g477e5973ec04g7c3232", "0de1ec83304d761he786", "3c1h1f153530g90g35c2", "946637g145h48322686f"]' as ids
),
as_list AS (SELECT
*,
SPLIT(REGEXP_REPLACE(JSON_EXTRACT(ids,'$'), r'[\[\]\"]', ''), ',') AS split_items,
GENERATE_ARRAY(1, ARRAY_LENGTH(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(ids,'$'), r'[\[\]\"]', ''), ','))) AS positions
FROM my_ids)
SELECT grp, ids, positions[OFFSET(off)] as pos
FROM as_list, unnest(split_items) as ids WITH OFFSET off