如何在BigQuery中移除嵌套REPEATED结构中的指定字段?
解决BigQuery中移除嵌套重复记录字段的问题
我明白你现在遇到的问题了——要把重复RECORD类型Person里的Add字段去掉,但之前的写法没生效对吧?咱们来调整一下SQL语句就能搞定。
问题分析
你的原表结构里,Person是REPEATED模式的RECORD,里面包含Name和嵌套的Add字段。要保留Person的重复特性,只移除其中的Add,需要对数组里的每个元素单独处理,而不是直接用子查询的方式。
正确的SQL写法
CREATE TABLE `project_id.dataset.new_table_name` AS SELECT * REPLACE( ARRAY(SELECT AS STRUCT p.* EXCEPT(Add) FROM UNNEST(Person) p) AS Person ) FROM `project_id.dataset.table_name`;
代码解释
- 先用
UNNEST(Person)把重复的Person数组拆分成单个的RECORD元素; - 对每个元素
p使用p.* EXCEPT(Add),保留除了Add之外的所有字段(也就是Name); - 再用
ARRAY()把处理后的单个元素重新组合成REPEATED模式的RECORD; - 最后通过
* REPLACE(...)替换原表中的Person字段。
执行这段代码后,新表的结构就会和你期望的一致:Person仍然是REPEATED的RECORD,里面只保留Name字段。
内容的提问来源于stack exchange,提问作者user17777343
相关产品推荐
相关产品推荐

