BigQuery查询GA会话数据保存时报Schema is not flat错误如何解决
问题根本原因
该报错的核心原因是查询输出的结果列仍包含数组/嵌套结构体类型,而Google Drive支持的导出格式(CSV、Google Sheets等)要求输出为完全扁平的一维结构,不允许单个单元格存储多条数据。
你此前仅对hits数组做了拆分行操作,但h.customDimensions本身也是嵌套数组类型,单个hit下可对应多组index和value,因此输出结果中该列仍为非扁平结构,导出时就会触发报错。数据存储本身不存在问题,这是Google Analytics数据导出到BigQuery时的标准嵌套存储结构,只需在查询时完成完全打平即可解决问题。
修复方案
你需要再对customDimensions数组做一次unnest操作,将index和value展开为独立的扁平字段,修改后的查询代码如下:
SELECT cd.index AS custom_dimensions_index, cd.value AS custom_dimensions_value FROM `database-314102.70657995.ga_sessions_20211129`, UNNEST(hits) AS h, UNNEST(h.customDimensions) AS cd LIMIT 1000
如果需要保留会话、hit级别的其他字段,可在SELECT子句中对应添加,只要最终输出的所有字段都是非数组、非嵌套的基础类型(字符串、数值、时间等),即可正常导出到Google Drive。
如果业务场景需要保留同一个hit下的多个customDimension不拆分行,也可以将数组先聚合为字符串再导出,示例代码如下:
SELECT -- 将同一个hit下的所有customDimension拼接为单个字符串 STRING_AGG(CONCAT(CAST(cd.index AS STRING), ':', cd.value), ', ') AS all_custom_dimensions FROM `database-314102.70657995.ga_sessions_20211129`, UNNEST(hits) AS h LEFT JOIN UNNEST(h.customDimensions) AS cd GROUP BY h LIMIT 1000
内容的提问来源于stack exchange,提问作者FastBoi
相关产品推荐
相关产品推荐

