【问题标题】:Date is converting to Variant in snowflake while loading from pandas从熊猫加载时,日期正在转换为雪花中的变体
【发布时间】:2022-07-25 18:15:00
【问题描述】:

我正在使用以下代码使用 pandas 将数据从 excel 文件加载到雪花

import pandas as pd
import snowflake.connector as snowCtx
from snowflake.connector.pandas_tools import pd_writer,write_pandas

df=pd.read_excel(open(r\'SampleSuperstore.xlsx\', \'rb\'),sheet_name=\'Orders\')
df.columns = df.columns.str.upper()
print(df)

conn = snowCtx.connect(
    user=\'username\',
    password=\'password\',
    account=\'account\',
    database=\'superstore\',
    schema=\'PUBLIC\'
) 

table_name=\'ORDERS\'
success, nchunks, nrows, _ = write_pandas(conn,df,table_name,
                                          chunk_size = 300,
                                          schema = \'PUBLIC\')
print(success, nchunks, nrows)

excel中的日期列如下

Order_Date  Ship_Date
08-11-2016  11-11-2016

即使在熊猫数据框中,它也显示相同

Order_Date  Ship_Date
08-11-2016  11-11-2016

当我在雪花中查询结果时,我得到如下结果

ORDER_DATE          SHIP_DATE
1478563200000000    1478822400000000

如果我在雪花中将数据类型更改为日期,它会抛出一个错误,说明变体数据类型错误。

  • df[\'Order_date\'].dtypes 的结果是什么?
  • @LukaszSzozda datetime64[ns]

标签: excel pandas snowflake-cloud-data-platform variant snowflake-schema


【解决方案1】:

我不确定是否有办法在从 Excel 到 Snowflake 的链中修复它,但它是一个以微秒为单位的 Unix 纪元,这可以转换它:

set orderdate = 1478563200000000;
set shipdate  = 1478822400000000;

select   dateadd('us',$orderdate,'1970-01-01')::date ORDERDATE
        ,dateadd('us',$shipdate, '1970-01-01')::date SHIPDATE
;

【讨论】:

    【解决方案2】:

    作为一种解决方法,您可以将日期转换为字符串。 Snowflake 会将它们隐式转换为日期:

    df['ORDER_DATE'] = df['ORDER_DATE'].astype(str)
    df['SHIP_DATE'] = df['SHIP_DATE'].astype(str)
    
    table_name='ORDERS'
    success, nchunks, nrows, _ = write_pandas(conn,df,table_name,
                                              chunk_size = 300,
                                              schema = 'PUBLIC')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 2020-10-19
      • 2022-10-24
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多