具有多个 _TABLE_SUFFIX 条件的嵌套查询的意外结果

Posted

技术标签:

【中文标题】具有多个 _TABLE_SUFFIX 条件的嵌套查询的意外结果【英文标题】:Unexpected results for a nested query with multiple _TABLE_SUFFIX conditions 【发布时间】:2017-11-10 22:15:02 【问题描述】:

考虑以下查询(标准语法):

WITH
  v AS (
  SELECT
    _TABLE_SUFFIX AS y,
    *
  FROM
    `bigquery-public-data.noaa_gsod.gsod*`
  WHERE
    _TABLE_SUFFIX > '2000' )
SELECT
  y,
  COUNT(1) c
FROM
  v
WHERE
  y IN ('2016',
    '2017')
GROUP BY
  y

我期待它返回两行:

2016 4292866     
2017 3683760

但是,只返回第一个。我觉得很奇怪。这有什么原因吗?

如果您从子查询中删除 WHERE _TABLE_SUFFIX > '2000',则会按预期返回两行。此外,如果您从底部的列表中删除 2016,则会正确返回 2017 的单行。

这是预期的行为吗?

【问题讨论】:

这是一个错误!内部报告...谢谢!! 【参考方案1】:

可以通过将_table_suffix 转换为整数来解决此问题 归功于Przemek Iwańczak。

WITH
  v AS (
  SELECT
    _TABLE_SUFFIX AS y,
    *
  FROM
    `bigquery-public-data.noaa_gsod.gsod*`
  WHERE CAST(_TABLE_SUFFIX as INT64) > 2000
    )
SELECT
  y,
  COUNT(1) c
FROM
  v
WHERE
  y IN ('2016',
    '2017')
GROUP BY
  y

【讨论】:

以上是关于具有多个 _TABLE_SUFFIX 条件的嵌套查询的意外结果的主要内容,如果未能解决你的问题,请参考以下文章

使用具有嵌套或条件的多个 where(或 AND)?

如何修复 BigQuery 中缓慢的 _TABLE_SUFFIX 查询?

_TABLE_SUFFIX 字符串比较与整数

嵌套聚合Elasticsearch中的条件路径

Spark:如何从具有属性的多个嵌套 XML 文件转换为 Data Frame 数据

如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果