Как добавить null в ARRAY в BigQuery

Я пытаюсь извлечь значения из объектов JSON, представленных в таблице BigQuery. Постановка проблемы. У меня есть таблица со значениями json в одном из столбцов. Я хочу извлечь значения из json, когда значение ключа - это массив, а массив имеет совпадающие значения. Вывод должен быть в ARRAY согласно условию, указанному в запросе, написанном ниже, и когда есть объект, он должен возвращать значение в STRING. Пожалуйста, обратитесь к выходной таблице и запросу ниже. У меня есть таблица, как показано ниже

  json    
 -------- 
 "fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}] 
 "fruit":{"apples":"1","oranges":"15"}   
 "fruit":{"apples":"5","oranges":"1"}  
 "fruit":[{"lettuce":"7","kale": "8"}] 

Пишу ниже запрос

ВЫБРАТЬ json, ( ВЫБРАТЬ МАССИВ (JSON_EXTRACT_SCALAR (фрукт; '$ .oranges')) ИЗ НЕСТАНДАРТ (ifnull (json_extract_array (json, '$ .fruit'), [json_EXTRACT (json, '$ .fruit')])) фрукты ГДЕ JSON_EXTRACT_SCALAR (фрукты; '$ .apples') = "5") AS fruit_value ИЗ ТАБЛИЦА

Выдает ошибку типа Array cannot have a null element; error in writing field fruit_value Я хочу вывод, как показано ниже

|  json.   | fruit_value|  
| -------- | -------- | 
| "fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]| [10,4]| 
| "fruit":{"apples":"1","oranges":"15"}| null| 
| "fruit":{"apples":"5","oranges":"1"}| 1 | 
| "fruit":[{"lettuce":"7","kale": "8"}]| null|
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
2
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Рассмотрим ниже

#standardSQL
select json,
  array(
    select json_extract_scalar(x, '$.oranges') oranges,
    from unnest(ifnull(json_extract_array(json, '$.fruit'), 
    [json_extract(json, '$.fruit')])) x  
    where json_extract_scalar(x, '$.apples') = '5'
  ) as fruit_value
from `project.dataset.table`     

если применимо к образцу данных в вашем вопросе

with `project.dataset.table` as (
  select '{"fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]}' json union all
  select '{"fruit":{"apples":"1","oranges":"15"}}' union all
  select '{"fruit":{"apples":"5","oranges":"1"}}' union all
  select '{"fruit":[{"lettuce":"7","kale": "8"}]}' 
)     

выход

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