Google bigquery 通配符表中无法识别的列

Google bigquery 通配符表中无法识别的列,google-bigquery,Google Bigquery,我需要在匹配某些命名方案的所有表上查询相同的聚合统计: SELECT SUBSTR(CONCAT('20', _TABLE_SUFFIX), 0, 10) AS date, CASE WHEN ENDS_WITH(_TABLE_SUFFIX, 'mobile') THEN 'mobile' ELSE 'desktop' END AS client, APPROX_QUANTILES(bytesJS,1000)[OFFSET(500)] AS p50 FROM

我需要在匹配某些命名方案的所有表上查询相同的聚合统计:

SELECT
  SUBSTR(CONCAT('20', _TABLE_SUFFIX), 0, 10) AS date,
  CASE
    WHEN ENDS_WITH(_TABLE_SUFFIX, 'mobile') THEN 'mobile'
    ELSE 'desktop'
  END AS client,
  APPROX_QUANTILES(bytesJS,1000)[OFFSET(500)] AS p50
FROM
  `httparchive.runs.20*`
WHERE
  ENDS_WITH(_TABLE_SUFFIX, '_pages')
  OR ENDS_WITH(_TABLE_SUFFIX, '_pages_mobile')
GROUP BY
  1,
  2
ORDER BY
  1,
  2
但是,查询失败,出现
错误:无法识别的名称:bytesJS at[7:20]

应该有大约150个表与查询匹配。以下是其中一个表的架构:

bytesJS
是一个有效的列名,但由于无法识别而失败。替换不同的已知列时出现相同错误。我不确定这是否是使用表通配符的直接结果

我会用遗留的SQL重写它,看看它是否有效,但我的查询需要选择表元数据


这是否与通配符不兼容

这是一个有效的版本:

#standardSQL
SELECT
  SUBSTR(CONCAT('20', _TABLE_SUFFIX), 0, 10) AS date,
  CASE
    WHEN ENDS_WITH(_TABLE_SUFFIX, 'mobile') THEN 'mobile'
    ELSE 'desktop'
  END AS client,
  APPROX_QUANTILES(bytesJS,1000)[OFFSET(500)] AS p50
FROM
  `httparchive.runs.2017_05_15_pages*`
#WHERE
  #ENDS_WITH(_TABLE_SUFFIX, '_pages')
  #OR ENDS_WITH(_TABLE_SUFFIX, '_pages_mobile')
GROUP BY
  1,
  2
ORDER BY
  1,
  2
发生了什么:

  • httparchive.runs.20*
    包含一些没有
    bytesJS
    列的表,因此查询的其余部分不考虑该列
  • 当查询查找
    (\u TABLE\u SUFFIX,'u pages')或(\u TABLE\u SUFFIX,'u pages\u mobile')
    时,更改查询模式已经太晚了
解决方案:

  • FROM prefix*
    table glob在这里不起作用,您必须运行一个典型的表并集

还要注意,删除近似分位数行会产生有效的结果,因此错误肯定与bytesJS有关。啊,我明白了。因此,这将是将运行数据集拆分为页面和请求数据集的一个很好的理由。一定是请求表引起了问题是的。。。另一个“方便”的解决方案是将类型设为prefixFelipe,您知道有没有办法使用COALESCE或IFNULL来解决“无法识别的名称”问题?