BigQuery 错误:如果子查询中的范围聚合,则别名字段的 SELECT 会失败

BigQuery Bug: SELECT of aliased field fails if scoped aggregation in subquery

此查询失败:

SELECT
  g.repository.url,
  cnt,
FROM
  (SELECT
    repository.url,
    COUNT(payload.pages.action) WITHIN RECORD as cnt,
  FROM publicdata:samples.github_nested) g
LIMIT 10

出现错误:

Field 'g.repository.url' not found; did you mean 'repository.url'?

当 SELECT 包含从子查询中的作用域聚合计算的字段并且您没有任何 JOIN 时,SELECT 子句中的别名字段似乎不起作用。

我找到了一个相关的 bug,它被标记为固定的,但我认为子查询中范围聚合的存在可能是未涵盖的边缘情况。

此查询有效:

SELECT
  g.repository.url,
  cnt,
FROM
  (SELECT
    repository.url,
    99 as cnt,
  FROM publicdata:samples.github_nested) g
LIMIT 10

第一个查询应该有效吗? (我显然可以通过从 SELECT 子句中删除别名来解决这个问题,但 SQL 实际上是由我们使用的查询工具生成的,因此我们修复起来并不容易)。

是的,这是一个错误,第一次查询应该可以。

如果你用这个替换第一个查询会怎样:

SELECT
  g.url,
  g.cnt
FROM
  (SELECT
    repository.url,
    COUNT(payload.pages.action) WITHIN RECORD as cnt,
  FROM publicdata:samples.github_nested) g
LIMIT 10