Также вы можете попытаться преобразовать вашу строку в действительный JSON (добавить двойные кавычки и фигурные скобки), а затем использовать json_tuple для извлечения столбцов, но в любом случае вы должны знать имена столбцов и перечислять их в запросе, куст не может динамически выбирать столбцы.
Демонстрация:
with your_table as (--Use your table instead of this
select stack(3, 5, 'a:100, b:200',
6, 'b:300, c:150',
7, 'some_other_unknown_key:900'
) as (id, sat)
)
select t.id, p.a, p.b, p.c, p.some_other_unknown_key
from your_table t
lateral view outer json_tuple(concat('{',regexp_replace(t.sat,'([a-z_A-Z]*):','\\"$1\\":'),'}'), 'a','b','c','some_other_unknown_key') p as a,b,c,some_other_unknown_key;
Результат:
OK
id a b c some_other_unknown_key
5 100 200 NULL NULL
6 NULL 300 150 NULL
7 NULL NULL NULL 900
Time taken: 0.128 seconds, Fetched: 3 row(s)
Если данные содержат некоторые ключи, не указанные в запросе, они не будут извлечены.