将熊猫数据帧存储到雪花时如何解决编程错误

时间:2019-05-23 01:30:23

标签: sql pandas sqlalchemy amazon-sagemaker snowflake

我正在尝试使用SQLAlchemy将在sagemaker中创建的数据帧存储到雪花。该代码仅适用于某些列。当我添加其他列时,即使它们具有相同的数据类型,也会给我一个错误。在下面的示例中,如果我仅上传TA_ID,则可以使用,但是如果我上传Cluster_ID,则代码将引发错误。

我检查了SQLAlchemy网站,但没有找到有关编程错误的太多信息。

用于创建表的SQL代码

CREATE OR REPLACE TABLE test.m (
    TA_ID string,
     Cluster_ID string
)

Python代码

master2.to_sql(name='m', con=engine2, if_exists='append',  schema='test',index=False, index_label=None, chunksize=2000 )

ProgrammingError:

(snowflake.connector.errors.ProgrammingError) 000904 (42000): SQL compilation error: error line 1 at position 29
invalid identifier '"Cluster_ID"' [SQL: 'INSERT INTO test.m ("TA_ID", "Cluster_ID") VALUES (%(TA_ID)s, %(Cluster_ID)s)'] [parameters: ({'TA_ID': 'TA007', 'Cluster_ID': '0'}, {'TA_ID': 'TA007', 'Cluster_ID': '16'}, {'TA_ID': 'TA007', 'Cluster_ID': '40'}, {'TA_ID': 'TA007', 'Cluster_ID': '15'}, {'TA_ID': 'TA007', 'Cluster_ID': '29'}, {'TA_ID': 'TA007', 'Cluster_ID': '23'}, {'TA_ID': 'TA007', 'Cluster_ID': '9'}, {'TA_ID': 'TA007', 'Cluster_ID': '25'}, {'TA_ID': 'TA007', 'Cluster_ID': '42'}, {'TA_ID': 'TA007', 'Cluster_ID': '28'})] (Background on this error at: http://sqlalche.me/e/f405)

1 个答案:

答案 0 :(得分:0)

您已在SQL中将标识符双引号。即“ Cluster_ID”。 如果您没有使用列名也用双引号创建表,那么您的SQL必须与列名完全相同。

所以:

create table foo (
  "Column_ID" varchar 
);

select column_id from foo;  -- fails
select Column_ID from foo;  -- fails
select "Column_id" from foo;  -- fails
select "Column_ID" from foo;  -- succeeds

但是:

create table foo (
  Column_ID varchar
);

select column_id from foo;  -- succeeds
select Column_ID from foo;  -- succeeds

我建议您从SQL语句中删除双引号,并查看它是否可以正确解析。如果仍然失败,请确保SQL的大小写与定义的列名完全匹配。

-保罗-