将 ORDER BY 语句添加到查询而不展平结果会导致“无法查询重复字段的叉积”
Posted
技术标签:
【中文标题】将 ORDER BY 语句添加到查询而不展平结果会导致“无法查询重复字段的叉积”【英文标题】:Adding an ORDER BY statement to a query without flattening results leads to "Cannot query the cross product of repeated fields" 【发布时间】:2014-12-17 21:14:33 【问题描述】: 询问: “SELECT * FROM [table] ORDER BY id DESC LIMIT 10” AllowLargeResults = true 展平结果 = 假 表架构: [ “姓名”:“身份证”, “类型”:“字符串”, “模式”:“可为空” , "name": "repeated_field_1", “类型”:“字符串”, “模式”:“重复” , "名称": "repeated_field_2", “类型”:“字符串”, “模式”:“重复” ]查询“SELECT * FROM [table] LIMIT 10”可以正常工作。添加 order by 子句时出现此错误,即使 order by 未提及任何重复字段。
有什么办法可以做到吗?
【问题讨论】:
【参考方案1】:ORDER BY
子句会导致 BigQuery 自动展平查询的输出,从而导致您的查询尝试生成repeated_field_1 和repeat_field_2 的叉积。
如果您不关心保留字段的重复性,您可以显式地FLATTEN
他们两个,这将导致您的查询生成原始查询抱怨的叉积。
SELECT *
FROM FLATTEN(FLATTEN([table], repeated_field_1), repeated_field_2)
ORDER BY id DESC
LIMIT 10
除此之外,对于您对ORDER BY
和输出重复字段的查询,我没有一个好的解决方法。
另请参阅:BigQuery flattens result when selecting into table with GROUP BY even with “noflatten_results” flag on
【讨论】:
以上是关于将 ORDER BY 语句添加到查询而不展平结果会导致“无法查询重复字段的叉积”的主要内容,如果未能解决你的问题,请参考以下文章
Hive中的Order by与关系型数据库中的order by语句的异同点