首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BigQuery中按64个以上的键进行分组

如何在BigQuery中按64个以上的键进行分组
EN

Stack Overflow用户
提问于 2015-06-25 00:01:37
回答 2查看 732关注 0票数 3

使用Google-BigQuery,我创建了一个包含近100个字段的查询,按其中96个字段分组:

代码语言:javascript
复制
SELECT 
    field1,field2,(...),MAX(field100) as max100
FROM dataset.table1
GROUP BY field1,field2,(...),field96

我得到了这个错误

代码语言:javascript
复制
Error: Maximum number of keys in GROUP BY clause is 64, query has 96 GROUP BY keys.

因此,没有机会使用google-bigquery对超过64个字段进行分组。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2015-06-25 00:54:02

如果这些字段中有一些是字符串,并且有一个字符不能出现在其中(例如,':'),那么您可以将它们连接在一起,并通过连接进行分组,即

代码语言:javascript
复制
SELECT CONCAT(field1, ':', field2, ':', field3) as composite_field, ...
FROM dataset.table
GROUP BY 1, 2, ..., 64

为了稍后恢复原始字段,您可以使用

代码语言:javascript
复制
SELECT 
regexp_extract(composite_field, r'([^:]*):') field1,
regexp_extract(composite_field, r'[^:]*:([^:]*)') field2, 
regexp_extract(composite_field, r'[^:]*:[^:]*:(.*)') field3,
...
FROM (...)
票数 2
EN

Stack Overflow用户

发布于 2019-02-26 18:31:01

这似乎是一个内部限制,没有文档记录。

我开发的另一个解决方案与Mosha的解决方案类似。

例如,您可以添加一个名为hashref的额外列。新列是由您想要分组的所有列计算的,例如,使用竖线分隔,并将md5sha256应用于行。

然后,您可以使用新的hashref进行分组,对于其他列,您只需应用min()函数,这也是一个聚合器。

代码语言:javascript
复制
line = name + "|" + surname + "|" + age
hashref = md5(line)

..。然后..。

代码语言:javascript
复制
SELECT hashref, min(name), min(surname)
FROM mytable
GROUP BY hashref
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31031444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档