我正在尝试使用SQLAlchemy将在sagemaker中创建的数据帧存储到雪花。该代码仅适用于某些列。当我添加其他列时,即使它们具有相同的数据类型,也会给我一个错误。在下面的示例中,如果我仅上传TA_ID,则可以使用,但是如果我上传Cluster_ID,则代码将引发错误。
我检查了SQLAlchemy网站,但没有找到有关编程错误的太多信息。
CREATE OR REPLACE TABLE test.m (
TA_ID string,
Cluster_ID string
)
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)
答案 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的大小写与定义的列名完全匹配。
-保罗-