Json для структуры в BigQuery

Если у меня есть следующий 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

Как у вас есть JSON в столбце? существует в таблице? Вы хотите, возможно, импортировать?

Pentium10 10.12.2020 21:37

@ Pentium10 О, это просто локально, например. Вот пример: gist.github.com/lisovskyvlad/26bb4ae3a49249566e8f59c8ddf2b2e‌​c. Для тестирования я использую with temp as (...)

David542 10.12.2020 21:38
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
1 574
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ниже приведен стандартный 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 перед запуском запроса?

David542 10.12.2020 21:57

Короче говоря, BQ на самом деле не интерполирует его, вы должны вручную указать структуру из json (что может показаться очень сложным, если это сильно вложенный объект!), это правильно?

David542 10.12.2020 22:01

вы правы. но для конкретного случая с известной схемой - выполнимо. с помощью сценариев и execute immediate ...

Mikhail Berlyant 10.12.2020 22:10

Другие вопросы по теме