Можете ли вы разыграть повторное поле, не снимая с себя? - PullRequest
0 голосов
/ 05 ноября 2018

Представьте себе таблицу с именем orders с повторяющимся и вложенным полем с именем items. Это поле является массивом структур, где структуры содержат одно поле unit_price. Есть ли способ преобразовать это поле из строки в число с плавающей точкой, не распаковывая и не агрегируя, как я делаю в настоящее время?

В этом случае я преобразовываю таблицу, созданную с помощью задания ETL. Задание ETL не всегда дает правильные типы данных, поэтому иногда мне нужно приводить поля внутри повторяющейся записи.

Вот мой текущий подход:

SELECT
  ARRAY
  (
    SELECT AS STRUCT
    CAST(unit_price AS FLOAT64) AS unit_price
    FROM UNNEST(items)
  ) AS items
FROM orders

1 Ответ

0 голосов
/ 05 ноября 2018

Вы не можете CAST повторять поле / Массив в массив другого типа
Таким образом, преобразование ARRAY<STRUCT<unit_price STRING>> в ARRAY<STRUCT<unit_price FLOAT64>> не будет работать

Я думаю, то, что вы делаете сейчас, это путь!

Примечание: если бы вы изменили название предмета с unit_price на, скажем, item_price - ниже простое приведение будет работать

#standardSQL
SELECT CAST(items AS ARRAY<STRUCT<item_price STRING>>) items
FROM `project.dataset.orders`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...