如何使用pandas和sqlalchemy将VARIANT或ARRAY数据类型插入到Snowflake中

时间:2019-04-14 23:54:43

标签: python pandas sqlalchemy snowflake-datawarehouse snowflake

我有一个Pandas数据框,其中包含几列列表。我想将它们作为ARRAY数据类型插入到我的Snowflake表中。

传统上,我使用PostgreSQL,并简单地插入为df_to_insert.to_sql(TABLE_NAME, sqlalchemy_connection, **other_parameters)

但是,我正在努力插入雪花。当我有一个列表的列时,sqlAlchemy Snowflake方言认为它是一个字符串:

  

表达式类型与列数据类型不匹配,期望为ARRAY但   在NAME_OF_COLUMN_WITH_LISTS列中获得了VARCHAR(2)

我尝试通过添加显式dtypes来给sqlAlchemy引擎暗示该列不是字符串的提示:

df_to_insert.to_sql("MY_SNOWFLAKE_TABLE_NAME",
                     snowflake_connection,
                     if_exists="append",
                     index=False,
                     dtype={'NAME_OF_COLUMN_WITH_LISTS': sqlalchemy.types.JSON})

这只会让我:

  

sqlalchemy.exc.StatementError:(builtins.AttributeError)   'SnowflakeDialect'对象没有属性'_json_serializer'

将数据插入变量/数组类型的Snowflake表中并仍使用pandas / sqlalchemy的最佳方法是什么?还是没有好的方法呢?

1 个答案:

答案 0 :(得分:0)

解决此问题的直接方法是:

  1. 将数据框写入本地文本文件。
  2. 使用PUT命令上载到Snowflake STAGE
  3. 运行create or replace table as select from stage,然后在select语句中将字段转换为适当的类型。