将 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 语句添加到查询而不展平结果会导致“无法查询重复字段的叉积”的主要内容,如果未能解决你的问题,请参考以下文章

SQL系列—— 排序(order by)

Hive中的Order by与关系型数据库中的order by语句的异同点

SQL语句之order by group byhavingwhere

MySQL ORDER BY:对查询结果进行排序

python:mysql之ORDER BY 语句

将 JOIN 和 ORDER BY 添加到查询后,性能意外提升