我主要在这里重现我在forum.aws上看到的一个问题,希望 stackoverflow 社区的答案/解释比论坛上的讨论更彻底、更有启发性。
这是我对这个问题的经验:我使用 pandas 从 python 中的数据帧制作了一个镶木地板文件,并将一个字段/列说生日作为datetime64[ns]
使用pandas.to_datetime
. 这部分过程似乎完美无缺,因为我可以使用读取镶木地板文件pandas.read_parquet
并获得我期望的结果,即在日期时间中输入的日期。但是,当我将所述镶木地板文件加载到 AWS 并在athena
其上放置一个表格时,读取相同的生日列会产生与镶木地板文件中的日期完全不匹配的垃圾日期。例如
t = pandas.DataFrame([['Haiti',pandas.to_datetime('1804-01-01')]],columns=['Country','Independence'])
t.to_parquet("s3://<mybucket>/tmp/t.parquet")
|Country | Independence|
|--------|-------------|
|Haiti | 1804-01-01 |
CREATE EXTERNAL TABLE IF NOT EXISTS default.mytable (
`Country` string,
`Independence` timestamp
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://<mybucket>/tmp/'
TBLPROPERTIES ('has_encrypted_data'='false');
SELECT * FROM "default"."mytable" limit 10;
|Country | Independence |
|--------|--------------------------|
|Haiti |-164033-12-18 00:00:00.000|
翻过高山走不出你
相关分类