【问题标题】:Querying timestamp data in Athena when the timestamp format in the underlying JSON files has changed当底层 JSON 文件中的时间戳格式发生变化时在 Athena 中查询时间戳数据
【发布时间】:2019-02-04 03:48:55
【问题描述】:

我正在从存储在 S3 中的 JSON 文件查询 AWS Athena 中的数据。我已经使用 AWS Glue 将所有 JSON 文件加载到 Athena 中,到目前为止它运行良好。但是,来自

的 JSON 文件中的时间戳格式已更改
2018-03-23 15:00:30.998

2018-08-29T07:59:50.568Z

所以表格最终会有这样的条目

2018-08-29T07:59:42.803Z
2018-08-29T07:59:42.802Z
2018-08-29T07:59:32.500Z
2018-03-23 15:03:43.232
2018-03-23 15:03:44.697
2018-03-23 15:04:11.951

当我尝试对整个数据库运行查询时,这会导致解析错误。

如何在 AWS Glue(或 Athena)中适应这种情况,以便在查询时不必拆分数据?我曾尝试研究自定义分类器,但不确定如何在这种特殊情况下使用它们。

提前致谢。

【问题讨论】:

  • 您能否将您的时间戳值映射为varchar?然后,您将能够使用 CASE 语句在 SQL 中显式解析它们(或定义执行该操作的 VIEW),检查特定值的格式。
  • 这似乎也有效。但实际上我最终还是统一了数据。

标签: amazon-web-services amazon-athena presto aws-glue


【解决方案1】:

不幸的是,您必须统一数据。如果您决定使用“2018-08-29T07:59:50.568Z”格式,则可以使用具有以下 serde 属性的 org.apache.hive.hcatalog.data.JsonSerDe 库读取此类数据:'timestamp.formats'=' yyyy-MM-dd\'T\'HH:mm:ss.SSSZ'

【讨论】:

  • 我不太清楚你所说的“统一数据”是什么意思?
  • 正如您提到的,您有两种格式的时间戳列(2018-08-29T07:59:42.803Z 和 2018-03-23 15:03:44.697)。您必须统一数据并仅使用一种格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 2022-01-08
  • 2019-02-17
  • 2012-06-24
相关资源
最近更新 更多