简体   繁体   中英

Getting selection of structs from an array of structs in BQ

I have a table where one column is defined as:

my_column ARRAY<STRUCT<key STRING, value FLOAT64, description STRING>>

Is there some easy way how to specify list of parameters to be returned in a SELECT statement? For instance removing description , so the result column would be still an array of structs but containing only key and value .

Below is for BigQuery Standard SQL

#standardSQL
SELECT * REPLACE(
  ARRAY(
    SELECT AS STRUCT * EXCEPT(description)
    FROM UNNEST(my_column)
  ) AS my_column)
FROM `project.dataset.table`  

Above fully preserves schema of table and only does change in my_column field by removing description

I would just unnest and then re-aggregate your selected fields.

select array_agg(struct(m.key,m.value)) as my_new_column
from table
left join unnest(my_column) m

I found this way:

SELECT
ARRAY(SELECT AS VALUE STRUCT(key, value) FROM a.my_column) as my_new_column
FROM my_table a

No joining or unnesting needed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM