Sql 执行求和聚合操作时,使用通配符进行大查询时出错

Sql 执行求和聚合操作时,使用通配符进行大查询时出错,sql,google-bigquery,Sql,Google Bigquery,我正在尝试使用谷歌对一些数据进行大查询。我正在尝试使用来查询多个表。 该格式适用于某些数据类型的列,例如INTEGER,但对于其他数据类型,例如FLOAT,失败。下面是我试图执行的查询的表示 [更新]目前为止,对于行程距离(浮动)列,它似乎失败了。同一查询适用于另一列乘客计数(整数) 故障情况:浮点(行程距离)的通配符格式 查询单个表: select sum(trip_distance) from `bigquery-public-data.new_york_taxi_trips.tlc_gr

我正在尝试使用谷歌对一些数据进行大查询。我正在尝试使用来查询多个表。 该格式适用于某些数据类型的列,例如INTEGER,但对于其他数据类型,例如FLOAT,失败。下面是我试图执行的查询的表示

[更新]目前为止,对于行程距离(浮动)列,它似乎失败了。同一查询适用于另一列乘客计数(整数)

故障情况:浮点(行程距离)的通配符格式

查询单个表:

select sum(trip_distance)
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')
查询多个表:

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014', '2015')
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 
(
  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`
)
上面的查询抛出一个错误,如下所示

错误:无法将FLOAT64类型的字段“行程距离”读取为数字

我不确定上面的错误为什么会发生,因为下面的查询有效(我希望避免非通配符错误,因为它将变得巨大,因为需要查询更多表)

成功:乘客计数的通配符格式(整数)

查询单个表:

select sum(trip_distance)
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')
查询多个表:

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014', '2015')
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 
(
  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`
)
成功:不带通配符的正常语法

单表查询

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2014`
查询多个表:

select sum(trip_distance)
from  `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014', '2015')
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 
(
  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`
)

有人能告诉我,当我使用电脑时,我遗漏了什么吗。我喜欢使用的答案。

这太长了,不能评论

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

select trip_distance
from `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_*`
where _TABLE_SUFFIX  in ('2014')
limit 100
我得到一个错误:

查询失败

错误:无法将FLOAT64类型的字段“trip\u distance”读取为数字

我以前从未见过这种错误。数据在预览窗格中看起来正常。我只能假设底层数据中出现了问题。2014年(假设数据是在该时间段内加载的),数据类型不可能是
NUMERIC
——因此我不知道
NUMERIC
来自何处

不用说——考虑到该列根本无法读取——该列无法转换为我尝试过的任何其他类型

我认为数据被破坏了。我不确定在谷歌联系谁,但它应该被修复或删除

编辑:

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

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


如果这是一个问题,因为您需要混合不同年份的数据,那么您可以创建一个视图来进行所需的转换(尽管使用该视图可能会增加查询的成本).

您可能应该停止为每年生成单独的表。只需创建一个表,其中的日期/整数列表示特定的年份,然后根据该列进行聚合。谢谢,但我无法控制表的生成方式。我只能查询表OK,但您的第二个联合查询是否会生成任何错误?看起来很正确rect,至少从ANSI标准的角度来看是这样。联合查询可能是您在这里的唯一选择,除非您可以使用动态SQL或脚本生成所需的查询。如果可能的话,将来可以使用单个表。您不能使用通配符引用表名。这样的功能除了存在重大安全风险外,还将是一个安全隐患很难实现。谢谢Gordon。这很有意义。我目前正在使用传统SQL查询作为解决方法。无法找到标准SQL方式(除上述2种方式外)来查询多个表。在标准SQL中还有其他方式吗?如果您知道2种以上的语法不同,并且可以与标准SQL一起使用,请告诉我