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

Jee*_*thi 3 python amazon-s3 epoch parquet amazon-athena

我已使用单个 parquet 文件加载 S3 以测试 Athena 查询。

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

样本:

Status
 Successfully returned 5 records in 460 ms
Bytes returned: 3278 B
{
"test_date":1467936000
}
Run Code Online (Sandbox Code Playgroud)

我使用这个镶木地板文件通过以下查询创建表

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')
Run Code Online (Sandbox Code Playgroud)

当我查询表格时,它给了我

    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.
Run Code Online (Sandbox Code Playgroud)

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

>datetime.datetime.fromtimestamp(1467936000)
datetime.datetime(2016, 7, 8, 5, 30)
Run Code Online (Sandbox Code Playgroud)

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

Jee*_*thi 6

显然 Athena 要求 Epoch 格式为milliseconds. 我把它放在seconds.

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

例子:

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