执行SUM聚合操作时,使用通配符的Big Query错误

时间:2019-04-19 07:00:07

标签: sql google-bigquery

我正在尝试使用Google大查询对某些数据进行SUM aggregation。我正在尝试使用wild card来查询多个表。 wild card格式适用于某些数据类型的列,例如 INTEGER ,但其他人失败,例如 FLOAT 。以下是我要执行的查询的表示形式

  

[更新] 看来,到目前为止,行程距离(FLOAT)列失败。相同的查询对另一列 passenger_count(INTEGER)

正常工作      

失败案例:FLOAT(trip_distance)的通配符格式

     

查询单个表:

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014')
     

查询多个表:

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014', '2015')
     

以上查询抛出如下错误

错误:无法将FLOAT64类型的字段“ trip_distance”读取为NUMERIC

enter image description here

我不确定为什么以下查询会导致ABOVE错误起作用(我要避免非通配符,因为它会变得巨大 >,因为要查询更多表)。

  

成功:passenger_count(INTEGER)的通配符格式

     

查询单个表:

select sum(passenger_count)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014')
     

查询多个表:

select sum(passenger_count)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014', '2015')
     

成功:不带通配符的常规语法

     

查询单个表

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2014`
     

查询多个表:

select sum(trip_distance)
from 
(
  select trip_distance
  from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2014`
  UNION ALL
  select trip_distance
  from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2015`
)

当我使用wildcard时,有人可以建议我所缺少的内容吗?我更喜欢使用standard sql format的答案。

1 个答案:

答案 0 :(得分:2)

这个评论太长了。

当我尝试运行此简单查询时:

select trip_distance
from `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014')
limit 100

我遇到了错误:

  

查询失败

     

错误:无法将FLOAT64类型的字段'trip_distance'读取为NUMERIC

我之前从未见过此错误。数据在预览窗格中看起来还可以。我只能假设基础数据有些混乱。在2014年(假设在该时间范围内加载了数据),数据类型不可能是NUMERIC,所以我不知道NUMERIC的来源。

不用说-鉴于该列根本无法读取-该列不能转换为我尝试过的任何其他类型。

我认为数据已损坏。我不确定在Google与谁联系,但应该将其固定或删除。

编辑:

我明白了。该数据是该表的最新版本(2018)中的NUMERIC。问题是*语法。这使用的是表的最新定义,并且类型不兼容。 (它可以进行转换,但不能。

我认为您已经弄清楚了如何独立查询每个表,因此您可以解决此问题。

如果由于需要混合不同年份的数据而出现问题,则可以创建一个视图,该视图可以完成所需的转换(尽管使用该视图可能会增加查询成本)。