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

В этом примере я могу обновить поле «имя», но не могу обновить поле «город» в массиве структуры.

--create or replace table mydataset.struct_3 (name string,address array< struct<status string, city string,state string>>)
--insert into mydataset.struct_3 (name,address) values("some_name",[("previous","some_city","some_state"),("current","some_city","some_state")])
--update `mydataset.struct_3` set name="some_name2" where name="some_name"
update  `mydataset.struct_3` set address.city="some_uscity" where address.city="some_city"

Я получаю эту ошибку,

Error: Cannot access field city on a value with type ARRAY<STRUCT<status STRING, city STRING, state STRING>> at [4:75]

Ответы [ 2 ]

0 голосов
/ 02 июня 2018
#standardSQL
UPDATE `mydataset.struct_3` SET address = ARRAY(
  SELECT AS STRUCT 
    status, IF(city="some_city", "some_uscity", city) city, state 
  FROM UNNEST(address)
) WHERE TRUE
0 голосов
/ 01 июня 2018

Вам необходимо заменить сам массив, обновив нужное значение:

update  `mydataset.struct_3`
set address = ARRAY(SELECT IF(city="some_city", "some_uscity", city) FROM UNNEST(address))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...