具有多个 _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 条件的嵌套查询的意外结果的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 BigQuery 中缓慢的 _TABLE_SUFFIX 查询?
Spark:如何从具有属性的多个嵌套 XML 文件转换为 Data Frame 数据
如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果