使用Google BigQuery中的SQL将字符串列转换为数字列

时间:2019-12-21 00:29:16

标签: sql google-bigquery

我正在分析data of New York City taxi trips of yellow cars in 2018。 (您需要一个Google BigQuery帐户才能访问此数据集。)

该模式表示大多数列都是数字。但是,当我尝试计算关键美元数字的总和(tip_amount,toll​​s_amount,total_amount)时,我收到一条错误消息,指出它们是字符串变量。

SELECT sum(total_amount) 
FROM [bigquery-public-data:new_york_taxi_trips.tlc_yellow_trips_2018] 
WHERE month(dropoff_datetime) = 12

Error: Field total_amount is of type STRING which is not supported for SUM

然后我尝试使用cast()函数将其转换为数字变量,但这没用。

SELECT sum(total_amount_numeric) FROM 
(
     SELECT cast(total_amount as numeric) as total_amount_numeric 
     FROM [bigquery-public-data:new_york_taxi_trips.tlc_yellow_trips_2018]
     WHERE month(dropoff_datetime) = 12
)

Error: Field total_amount_numeric is of type STRING which is not supported for SUM

如何分析这些数字变量,而不是数据库中错误设置的字符串变量?

2 个答案:

答案 0 :(得分:1)

您的查询将在标准SQL中按以下方式运行:

SELECT sum(total_amount_numeric)  
FROM (SELECT cast(total_amount as numeric) as total_amount_numeric 
      FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
      WHERE EXTRACT(month FROM dropoff_datetime) = 12
     ) x;

您可以在查询之前包含此提示,以确保使用标准SQL运行该提示:

#standardSQL

答案 1 :(得分:1)

以下是用于BigQuery标准SQL

#standardSQL
SELECT SUM(total_amount) 
FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
WHERE EXTRACT(MONTH FROM dropoff_datetime) = 12  

您遇到的问题是因为BigQuery旧版SQL不支持NUMERIC数据类型,而是将其视为STRING,并且不能将其CAST转换为FLOAT或INTEGER

因此,解决方法是使用上面的示例中的BigQuery Standard SQL-正如您在此处看到的那样,您无需进行任何CAST操作,因为此字段已经是NUMERIC