【问题标题】:AWS Glue (or Athena or Presto) - Changing Decimal FormatAWS Glue(或 Athena 或 Presto)- 更改十进制格式
【发布时间】:2019-12-28 22:58:29
【问题描述】:

我正在尝试使用 Athena 读取 CSV 文件。其中一个字段是用逗号作为小数点分隔符而不是点的 DOUBLE。

有没有办法阅读它?还是唯一的方法是转换(使用每点替换逗号)?

【问题讨论】:

  • AFAICT CSV 文件被读取为varchar 列,所以问题是如何在SQL 中将'123,45' 之类的文本解析为double,对吧?如果是这种情况,那么我认为你能得到的最好的就是CAST(replace(text, ',', '.') AS double)

标签: hive presto amazon-athena aws-glue


【解决方案1】:

无法更改设置以使 Athena 将值读取为双精度值,但有一些方法可以绕过它。在这两种情况下,您都必须使用 string 作为列的数据类型:

  • 创建一个将值转换为双精度值的视图(按照 Piotr 的建议使用 CAST(replace(text, ',', '.') AS double))。这样您就不必在每个查询中都包含转换表达式。
  • 使用CREATE TABLE AS (CTAS) 并将值转换为双精度值(使用相同的表达式)到一个新表中。如果您这样做,您还可以转换为例如 Parquet 并获得其他好处。不过,每次数据更改时都必须这样做,这可能不方便。

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2020-06-27
    • 1970-01-01
    • 2021-12-22
    • 2019-07-21
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多