Snowpark查询CUSTOMERS表报FIRST_NAME无效标识符错误如何解决?
解决Snowpark查询CUSTOMERS表时的"无效标识符'FIRST_NAME'"错误
1. 确认表的实际列名(区分大小写)
Snowflake默认会把未加双引号的标识符转为大写,但如果建表时列名是用双引号定义的小写/混合大小写,查询时必须用双引号包裹且严格匹配大小写。先执行以下SQL确认列名的实际存储形式:
DESCRIBE TABLE CUSTOMERS;
查看输出的name列,确认列名是FIRST_NAME还是first_name(注意大小写细节)。
2. 修正Snowpark代码的列引用方式
错误示例(如果列实际为小写):
df = session.table("CUSTOMERS").select("ID", "FIRST_NAME", "LAST_NAME")
正确写法(根据实际列名调整):
如果列实际是first_name(建表时用双引号定义),则:
df = session.table("CUSTOMERS").select('ID', '"first_name"', '"last_name"')
或者用Snowpark的col函数更清晰:
from snowflake.snowpark.functions import col df = session.table("CUSTOMERS").select(col("ID"), col('"first_name"'), col('"last_name"'))
3. 检查表的完整引用路径
如果CUSTOMERS表不在当前会话的默认数据库和架构下,需要指定完整的表路径,避免因找不到正确表导致列名识别错误:
df = session.table("MY_DB.MY_SCHEMA.CUSTOMERS").select(...)
4. 验证会话的大小写敏感性设置
检查当前会话的QUOTED_IDENTIFIERS_IGNORE_CASE参数值:
SHOW PARAMETERS LIKE 'QUOTED_IDENTIFIERS_IGNORE_CASE';
如果该参数设为TRUE,双引号包裹的标识符会忽略大小写;如果是FALSE则严格区分。可以临时修改参数测试:
session.sql("ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE").collect()
之后重新执行查询看是否解决问题。
5. 排查拼写错误
仔细核对DESCRIBE TABLE的输出,确认列名没有拼写错误(比如是否是FIRSTNAME而非FIRST_NAME),同时检查表名是否正确(比如是否是CUSTOMER单数而非CUSTOMERS)。
内容的提问来源于stack exchange,提问作者Aman Savaria
相关产品推荐
相关产品推荐

