AWS Athena 使用填充错误数据的创建表从 Epoch 转换为时间戳

Posted

技术标签:

【中文标题】AWS Athena 使用填充错误数据的创建表从 Epoch 转换为时间戳【英文标题】:AWS Athena's conversion from Epoch to timestamp using create table populated with wrong data 【发布时间】:2021-09-12 13:33:34 【问题描述】:

我已经为 S3 加载了一个 parquet 文件以测试 Athena 查询。

将文件上传到 S3 后,我使用 S3 选择查询来检查数据。

示例:

Status
 Successfully returned 5 records in 460 ms
Bytes returned: 3278 B

"test_date":1467936000

我使用这个 parquet 文件通过以下查询创建表

CREATE EXTERNAL TABLE `test_table`(
  `test_date` timestamp)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://xxxxxxxxx/'
TBLPROPERTIES (
  'has_encrypted_data'='false')

当我查询表时,它给了我

    test_date
1   1970-01-17 23:45:36.000
2   1970-01-17 23:45:36.000
3   1970-01-17 23:45:36.000
etc.

但是使用 python 转换 parquet 文件中的原始整数,即 1467936000 会给我正确的日期时间。

>datetime.datetime.fromtimestamp(1467936000)
datetime.datetime(2016, 7, 8, 5, 30)

如何让 Athena 正确地将 Epoch 解释为时间戳

【问题讨论】:

【参考方案1】:

显然 Athena 要求 Epoch 格式为 milliseconds。我有它在seconds

在数据文件中乘以 1000 解决了我的问题。

例子:

1467936000000 正确转换为 2016-07-08 00:00:00.000

【讨论】:

以上是关于AWS Athena 使用填充错误数据的创建表从 Epoch 转换为时间戳的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Boto3 get_query_results 方法从 AWS Athena 创建数据框

带有时间戳的 AWS Athena SQL 查询错误

AWS Athena 创建表和分区

以编程方式创建 AWS Athena 视图

将数据从 Google Analytics 迁移到 AWS Athena

使用CloudFormation模板更新AWS Athena工作组