python - 如何使用 pandas 和 sqlalchemy 将 VARIANT 或 ARRAY 数据类型插入 Snowflake
问题描述
我有一个 Pandas 数据框,其中包含几个列表列。我想将它们作为ARRAY
数据类型插入到我的雪花表中。
传统上,我使用过 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'
将数据插入变体/数组类型的雪花表并仍然使用熊猫/sqlalchemy的最佳方法是什么?或者还没有什么好的方法可以做到这一点?
解决方案
解决此问题的直接方法是:
- 将数据框写入本地文本文件。
- 使用 PUT 命令上传到 Snowflake STAGE
- 在 select 语句中运行
create or replace table as select from stage
并将字段转换为正确的类型。
推荐阅读
- jquery - Jquery Tooltipster - ajax 后访问 DOM
- oracle - 通过 azure databricks 运行 oracle 查询
- woocommerce - Woocommerce - 在管理面板中显示订单总量
- android - 为什么 dlopen() 会在两个不同的调用中为同一个共享库返回两个不同的句柄?
- python - 将创建日期戳添加到 seaborn 可视化
- java - 瞬态变量的约束验证异常
- laravel - localhost 无法加载应用程序 centos 服务器
- flutter - 键盘在较旧的 Android 版本上退出全屏模式
- python - Python中的多项式回归曲线
- acumatica - 导入方案是否使用 DAC 中指定的 PXDefault 属性?