Как я могу ОБНОВИТЬ (умножить на 5, а не просто заменить) вложенные поля доходов в BigQuery?

Я пытаюсь использовать DML в BigQuery для обновления вложенных полей доходов. Проблема в том, что я не хочу просто заменять значение дохода, а вместо этого умножаю его на определенный коэффициент.

Для замены я обнаружил:

UPDATE `project.dataset.table`
SET hits = ARRAY(
  SELECT AS STRUCT * REPLACE (
    (SELECT AS STRUCT transaction.* REPLACE ( 1 AS transactionRevenue)) AS transaction
  )
  FROM UNNEST(hits) as transactionRevenue
)
WHERE true

Но хотелось бы иметь что-то вроде:

UPDATE `project.dataset.table`
SET hits = ARRAY(
  SELECT AS STRUCT * REPLACE (
    (SELECT AS STRUCT transaction.* REPLACE ( (transactionRevenue*5) AS transactionRevenue)) AS transaction
  )
  FROM UNNEST(hits) as transactionRevenue
)
WHERE true

Такой подход не работает. Сообщение об ошибке: Нет соответствующей подписи для оператора * для типов аргументов: STRUCT, INT64. Поддерживаемые подписи: INT64 * INT64; FLOAT64 * FLOAT64; NUMERIC * NUMERIC в [4:48]


person Lena    schedule 19.07.2019    source источник


Ответы (1)


Ниже должно работать

UPDATE `project.dataset.table`
SET hits = ARRAY(
  SELECT AS STRUCT * REPLACE(
    (SELECT AS STRUCT * REPLACE(5 * transactionRevenue AS transactionRevenue) 
      FROM UNNEST([transaction])
    ) AS transaction
  ) 
  FROM t.hits
)
WHERE true
person Mikhail Berlyant    schedule 19.07.2019
comment
Спасибо за помощь, Михаил! - person Lena; 25.07.2019