使用Google-BigQuery,我创建了一个包含近100个字段的查询,按其中96个字段分组:
SELECT
field1,field2,(...),MAX(field100) as max100
FROM dataset.table1
GROUP BY field1,field2,(...),field96我得到了这个错误
Error: Maximum number of keys in GROUP BY clause is 64, query has 96 GROUP BY keys.因此,没有机会使用google-bigquery对超过64个字段进行分组。有什么建议吗?
发布于 2015-06-25 00:54:02
如果这些字段中有一些是字符串,并且有一个字符不能出现在其中(例如,':'),那么您可以将它们连接在一起,并通过连接进行分组,即
SELECT CONCAT(field1, ':', field2, ':', field3) as composite_field, ...
FROM dataset.table
GROUP BY 1, 2, ..., 64为了稍后恢复原始字段,您可以使用
SELECT
regexp_extract(composite_field, r'([^:]*):') field1,
regexp_extract(composite_field, r'[^:]*:([^:]*)') field2,
regexp_extract(composite_field, r'[^:]*:[^:]*:(.*)') field3,
...
FROM (...)发布于 2019-02-26 18:31:01
这似乎是一个内部限制,没有文档记录。
我开发的另一个解决方案与Mosha的解决方案类似。
例如,您可以添加一个名为hashref的额外列。新列是由您想要分组的所有列计算的,例如,使用竖线分隔,并将md5或sha256应用于行。
然后,您可以使用新的hashref进行分组,对于其他列,您只需应用min()函数,这也是一个聚合器。
line = name + "|" + surname + "|" + age
hashref = md5(line)..。然后..。
SELECT hashref, min(name), min(surname)
FROM mytable
GROUP BY hashrefhttps://stackoverflow.com/questions/31031444
复制相似问题