我正在尝试使用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
我不确定为什么以下查询会导致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的答案。
答案 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
。问题是*
语法。这使用的是表的最新定义,并且类型不兼容。 (它可以进行转换,但不能。
我认为您已经弄清楚了如何独立查询每个表,因此您可以解决此问题。
如果由于需要混合不同年份的数据而出现问题,则可以创建一个视图,该视图可以完成所需的转换(尽管使用该视图可能会增加查询成本)。