雪花 write_pandas 未正确插入日期

时间:2021-03-16 22:34:27

标签: python pandas datetime snowflake-cloud-data-platform

我有一个名为“df”的 Pandas 数据框,我正在使用针对 Netezza 数据库的 SQL 查询的结果创建它。我在 Jupyter 笔记本上工作。数据框有两行,其中两列(CREATEDDATE 和 STAGEDATE)包含日期时间值。当我运行 print(df) 时,结果如下所示:

                   ID ISDELETED            PARENTID         CREATEDBYID  \
0  017o000003tQRftAAG     false  a0no000000Hrv1IAAR  005o0000001w8wgAAA   
1  017o000003jl52cAAA     false  a0no000000GszDUAAZ  005o0000001w2pTAAQ   

          CREATEDDATE    FIELD OLDVALUE NEWVALUE  STAGEDATE  
0 2015-07-30 14:51:41  created     None     None 2016-06-06  
1 2015-07-16 14:48:37  created     None     None 2016-06-06

如果我运行print(df.dtypes),结果是这样的:

ID                     object
ISDELETED              object
PARENTID               object
CREATEDBYID            object
CREATEDDATE    datetime64[ns]
FIELD                  object
OLDVALUE               object
NEWVALUE               object
STAGEDATE      datetime64[ns]
dtype: object

因此,据我所知,我的日期时间列的格式正确,可以使用 write_pandas() 写入 Snowflake。但是,在我这样做之后,Snowflake 中的日期大不相同: enter image description here

例如,2016-06-06 的 STAGEDATE 值现在是 48399-06-06。有谁知道如何解决这一问题?我正在使用 pyodbc 从 Netezza 拉取数据并使用 df = cs.execute() 填充数据帧。我正在导入并使用 snowflake.connector 连接到 Snowflake 并运行以下命令以获取 write_pandas:

from snowflake.connector.pandas_tools import write_pandas

1 个答案:

答案 0 :(得分:0)

SELECT '2016-06-06'::timestamp as a
    ,to_timestamp_ntz(date_part('epoch_second', a),0)::date as a_s
    ,to_timestamp_ntz(date_part('epoch_millisecond', a),0)::date as a_ms
    ,to_timestamp_ntz(date_part('epoch_millisecond', a),3)::date as b_ms;

给予

A                        A_S          A_MS         B_MS
2016-06-06 00:00:00.000  2016-06-06   48399-06-06  2016-06-06

也就是说,你的日期变成了纪元毫秒,并解析为秒给出你的日期。

这样你就可以舍弃你的毫秒数,或者改变你的日期解析方式。

相关问题