Это проблема:
WHERE (select h.transaction.transactionId from unnest(hits) as h) LIKE 'ABC123XYZ'
Если в массиве более одного попадания, это приведет к появившейся ошибке. Вы, вероятно, хотите вместо этого:
WHERE EXISTS (select 1 from unnest(hits) as h WHERE h.transaction.transactionId LIKE 'ABC123XYZ')
Но учтите, что ваше ОБНОВЛЕНИЕ теперь заменит все элементов массива для любой строки, где это условие истинно. Вместо этого вы можете переместить условие в вызов функции ARRAY:
UPDATE `project_id.dataset_id.table`
SET hits = ARRAY(
SELECT AS STRUCT * REPLACE (
(SELECT AS STRUCT transaction.* REPLACE (1 AS transactionRevenue)) AS transaction
)
FROM UNNEST(hits) as h
WHERE h.transaction.transactionId LIKE 'ABC123XYZ'
)
WHERE true
Теперь замена будет применяться только к попаданиям с идентификатором транзакции, соответствующим шаблону.