Snowflake插入VARCHAR列时自动追加.0问题求助
原始数据
| Duplicate_id |
|---|
| 100387 |
| 100387 |
| 100387 |
需求
我有一列Duplicate_id,包含数值或NULL值(也可能存在部分NUMBER类型值),需要在插入时将该列转换为varchar类型。
操作流程
- 创建目标表:
CREATE OR REPLACE TABLE TEMP_TABLE (Duplicate_id VARCHAR(256));
- 创建Stage并将CSV文件上传至该Stage,执行数据加载命令:
COPY INTO TEMP_TABLE from @stage/my_file.csv.gz;
问题
插入完成后,所有非NULL值后都被追加了.0,结果如下:
| Duplicate_id |
|---|
| 100387.0 |
原因分析
问题出在Snowflake的COPY INTO命令的自动类型推断机制:
- CSV里的纯数字值(比如100387)会被Snowflake默认识别为NUMBER类型,而非字符串。
- 即便目标表字段是VARCHAR类型,Snowflake会先把解析出的数值转成字符串格式,而整数型的数值转字符串时,默认会带上
.0后缀,最终就出现了100387.0的结果。
解决方法
如果要保留原始数字的字符串形式(不带.0),可以用两种方式处理:
- 在COPY语句中显式将列转为字符串:
COPY INTO TEMP_TABLE (Duplicate_id) FROM ( SELECT CAST($1 AS VARCHAR) FROM @stage/my_file.csv.gz );
- 开启
FORCE_STRING参数,强制所有字段按字符串解析:
COPY INTO TEMP_TABLE from @stage/my_file.csv.gz FORCE_STRING = TRUE;
内容的提问来源于stack exchange,提问作者sa_
相关产品推荐
相关产品推荐

