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 创建数据框