【问题标题】:Amazon Athena- Querying columns with numbers stored as stringAmazon Athena - 使用存储为字符串的数字查询列
【发布时间】:2019-12-04 11:09:55
【问题描述】:

我有一个保险数据集,其中包括每个县的注册人数。但是,注册数量存储为字符串。我如何查询数据以获取诸如“查找注册人数超过 50 的计划”之类的内容。不幸的是,50 作为字符串存储在数据集中,所以我需要了解如何使用 athena 运行我的查询。有人可以帮忙吗

【问题讨论】:

  • 你试过SELECT CAST(column AS integer) FROM table吗?如果这不起作用,请编辑您的问题,向我们展示数据存储方式的示例,以及用于创建该列的 DDL。
  • 我试过这个。 “INVALID_CAST_ARGUMENT: Can not cast '800,850.00' to INT”是我得到的错误。 800,850 是 A 列的一个示例值。A 列有几个类似的值,但我必须将它们转换为整数,这样我才能使用大于或等于等逻辑运算符。目前该列的值存储为字符串
  • 好吧,那是你的问题。 800,850.00 不是数字,因此不能解释为数字。它是千位的分隔符,还是只是两个数字之间有逗号?请编辑您的问题,向我们展示该列中的数据样本,因为它存储在文件中。
  • 我确实上传了示例数据。我必须编写一个查询,它只显示 total_submitted_charge_amount 超过 100000 的那些行。
  • 1,035,296.00 是我的结果中缺少的另一个金额。

标签: amazon-web-services amazon-athena


【解决方案1】:

将字符串转换为浮点数,而不是整数,并在转换前删除逗号。这是一个例子:

with x AS 
    (SELECT '1,800,850.20' AS "value")
SELECT cast(replace(value,',', '') AS REAL)
FROM x

因此,您应该使用:

SELECT
  npi,
  CAST(REPLACE(total_submitted_charge_amount,',', '') AS REAL) AS charge_amount
FROM cmsaggregatepayment2017
WHERE CAST(REPLACE(total_submitted_charge_amount,',', '') > 100000
ORDER BY CAST(REPLACE(total_submitted_charge_amount,',', '') ASC
LIMIT 1000

【讨论】:

  • 不支持此类型的查询(服务:AmazonAthena;状态代码:400;错误代码:InvalidRequestException;请求 ID:c832b6f7-c66c-41b2-8b55-f3004f2f2edc)。下面是我的查询: select npi,cast(replace(total_submitted_charge_amount,',', '')) from cmsaggregatepayment2017 order by total_submitted_charge_amount Asc limit 1000
  • @RajParpani 我已将您的查询纳入答案。你错过了AS REAL 部分。
  • @JohnRotenstein 看看我更新的答案。我没有得到我想要的结果。出于某种原因,当我使用 > 或 时,Athena 没有正确读取数字
  • @RajParpani 您在 where 子句中使用 total_submitted_charge_amount,但它没有被强制转换为 REAL。您可以使用with 语句来修复它:with datamart as (SELECT npi, ..., CAST(REPLACE(total_submitted_charge_amount, ',', '') AS REAL) as total_submitted_charge_amount FROM cmsaggregatepayment2017) select * from datamart WHERE total_submitted_charge_amount > '100000' AND provider_zipcode='90250' ORDER BY total_submitted_charge_amount ASC LIMIT 1000
  • @shuvalov 这是正确的解决方案。太感谢了。您能否解释一下为什么我的查询不起作用?
猜你喜欢
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2022-06-21
  • 2018-04-08
  • 2018-12-08
  • 1970-01-01
相关资源
最近更新 更多