Ниже для BigQuery Standard SQL
#standardSQL
SELECT p._id, p.name,
STRING_AGG(r.name, ', ' ORDER BY OFFSET) AS available_in_region_name
FROM `project.dataset.Products` p,
UNNEST(SPLIT(available_in_region_id, ', ')) rid WITH OFFSET
LEFT JOIN `project.dataset.Regions` r
ON rid = r._id
GROUP BY _id, name
Вы можете протестировать, поэкспериментировать с приведенными выше примерами данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.Products` AS (
SELECT 'd22' _id, 'shoe' name, 'c32, a43, x53' available_in_region_id UNION ALL
SELECT 't64', 'hat', 'c32, f42'
), `project.dataset.Regions` AS (
SELECT 'c32' _id, 'london' name UNION ALL
SELECT 'a43', 'manchester' UNION ALL
SELECT 'x53', 'bristol' UNION ALL
SELECT 'f42', 'liverpool'
)
SELECT p._id, p.name,
STRING_AGG(r.name, ', ' ORDER BY OFFSET) AS available_in_region_name
FROM `project.dataset.Products` p,
UNNEST(SPLIT(available_in_region_id, ', ')) rid WITH OFFSET
LEFT JOIN `project.dataset.Regions` r
ON rid = r._id
GROUP BY _id, name
с выводом
Row _id name available_in_region_name
1 d22 shoe london, manchester, bristol
2 t64 hat london, liverpool