Если у меня есть следующий json:
[
{
"Source": "Internet Movie Database",
"Value": "7.8/10"
},
{
"Source": "Rotten Tomatoes",
"Value": "89%"
},
{
"Source": "Metacritic",
"Value": "75/100"
}
]
Есть ли способ заставить BQ интерполировать это как структуру? т. е. снизу это будет:
/* relaxed 'tuple' syntax: */
[('Internet Movie Database', '7.8/10'), ...]
/* 'full' syntax: */
[
STRUCT('Internet Movie Database' as Source, '7.8/10' as Value),
STRUCT('Rotten Tomatoes' as Source, '89%' as Value),
STRUCT('Metacritic' as Source, '75/100' as Value)
] as Reviews
@ Pentium10 О, это просто локально, например. Вот пример: gist.github.com/lisovskyvlad/26bb4ae3a49249566e8f59c8ddf2b2ec. Для тестирования я использую with temp as (...)
Ниже приведен стандартный SQL BigQuery.
#standardSQL
select
array(
select as struct
json_extract_scalar(rec, '$.Source') as Source,
json_extract_scalar(rec, '$.Value') as Value
from t.arr as rec
) as Reviews
from `project.dataset.table`,
unnest([struct(json_extract_array(json) as arr)]) t
Если применить к выборке данных из вашего вопроса - вывод
Вы можете протестировать выше, используя ниже CTE
with `project.dataset.table` as (
select '''
[
{
"Source": "Internet Movie Database",
"Value": "7.8/10"
},
{
"Source": "Rotten Tomatoes",
"Value": "89%"
},
{
"Source": "Metacritic",
"Value": "75/100"
}
]
''' json
)
спасибо, не могли бы вы показать, используя оператор with
, или как вы получили свои данные «в» BQ перед запуском запроса?
Короче говоря, BQ на самом деле не интерполирует его, вы должны вручную указать структуру из json (что может показаться очень сложным, если это сильно вложенный объект!), это правильно?
вы правы. но для конкретного случая с известной схемой - выполнимо. с помощью сценариев и execute immediate
...
Как у вас есть JSON в столбце? существует в таблице? Вы хотите, возможно, импортировать?