首页 > 解决方案 > 您可以在不取消嵌套的情况下投射重复的字段吗?

问题描述

想象一个名为的表,其中包含一个名为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

标签: google-bigquery

解决方案


您不能将重复字段 / ARRAY 转换为不同类型的数组
所以,转换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`

推荐阅读