【发布时间】:2021-06-14 06:41:08
【问题描述】:
我有一个名为“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 中的日期大不相同:
例如,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
【问题讨论】:
-
你能分享一下 Snowflake 中目标表的结构吗?特别是两个日期列 CREATEDDATE 和 STAGEDATE 的数据类型。此外,可能值得检查 TIMESTAMP_OUTPUT_FORMAT 参数(请参阅显示参数命令docs.snowflake.com/en/sql-reference/sql/show-parameters.html)
-
创建或替换 TRANSIENT TABLE ACCT_HST (ID VARCHAR(18), ISDELETED VARCHAR(5), ACCOUNTID VARCHAR(18), CREATEDBYID VARCHAR(18), CREATEDDATE TIMESTAMP_NTZ(9), FIELD VARCHAR(255) , OLDVALUE VARCHAR(255), NEWVALUE VARCHAR(255), STAGEDATE TIMESTAMP_NTZ(9) );
-
我的直觉是您的 TIMESTAMP_OUTPUT_FORMAT 的会话/帐户参数设置对此负责。您可以证明使用 CONVERT_TIMEZONE('UTC', CREATEDDATE) 或检查运行 SHOW PARAMETERS 的参数 TIMESTAMP_OUTPUT_FORMAT 和 TIMESTAMP_NTZ_OUTPUT_FORMAT 将日期转换为 UTC;
-
@FrancescoQuaratino,雪花是目的地。源是 Netezza 设备(IBM Pure Data)。通过其他方法加载到雪花中的日期时间很好。只有我从我的 Python 程序加载的程序有这个问题。
标签: python pandas datetime snowflake-cloud-data-platform