Как изменить значения в массиве struct в BQ - PullRequest
0 голосов
/ 01 июня 2018

Я не понял (я не знаю), как изменить цвет «желтый» на «синий» и его идентификатор до 5. Решение примера поможет мне понять.Спасибо

--create or replace table mydataset.struct_4 (boxes string,colors array<struct<colour string,id int64>>)
--insert into mydataset.struct_4 (boxes,colors) values("box_1",[("brown",1),("green",3),("white",7)]),("box_2",[("yellow",2),("white",4)])
select * from `mydataset.struct_4` 

1 Ответ

0 голосов
/ 02 июня 2018
#standardSQL
SELECT 
  boxes, 
  ARRAY(
    SELECT AS STRUCT 
      IF(colour = 'yellow', 'blue', colour) colour, 
      IF(colour = 'yellow', 5, id) id
    FROM UNNEST(colors)
  ) colors
FROM `mydataset.struct_4` 

Вариация выше будет

#standardSQL
SELECT 
  boxes, 
  ARRAY(
    SELECT IF(colour = 'yellow', 
      STRUCT<colour STRING,id INT64>('blue', 5), 
      STRUCT(colour, id)) 
    FROM UNNEST(colors)
  ) colors
FROM `mydataset.struct_4`   

с тем же выводом курса

Row boxes   colors.colour   colors.id    
1   box_1   brown           1    
            green           3    
            white           7    
2   box_2   blue            5    
            white           4    

Обновление для: но как мне обновить цвет "желтый""to" blue "и его id до 5 с помощью оператора UPDATE DML :)

#standardSQL
UPDATE `mydataset.struct_4` SET colors = ARRAY(
    SELECT IF(colour = 'yellow', 
        STRUCT<colour STRING,id INT64>('blue', 5), 
        STRUCT(colour, id)) 
    FROM UNNEST(colors)
) WHERE TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...