从Azure外部阶段向Snowflake表导入时转换日期为Timestamp的方法
解决Snowflake加载CSV时日期格式不匹配的问题
问题出在Snowflake默认的timestamp解析规则不识别你CSV里的2/24/2003 0:00格式,必须显式指定匹配的格式字符串才能正确转换。下面是两种可行的解决方案:
方案一:在COPY命令中直接指定日期格式
修改你的COPY语句,给to_timestamp_ntz函数加上格式参数:
copy into sales_order (sales, orderdate) from (select t.$1, to_timestamp_ntz(t.$2, 'MM/DD/YYYY HH24:MI') from @sales_stage t);
这里的'MM/DD/YYYY HH24:MI'对应你的日期格式:
MM:月份(支持单/双位数,比如2或02)DD:日期YYYY:4位年份HH24:24小时制的小时(支持0或00)MI:分钟
如果你的日期里还有单位数的日期(比如2/3/2003),可以改用更宽松的格式字符串'M/D/YYYY H:MI',Snowflake同样能正确解析。
方案二:创建自定义文件格式(推荐)
如果后续还要加载同格式的CSV,建议先创建一个可复用的文件格式:
CREATE OR REPLACE FILE_FORMAT csv_sales_format TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"' -- 如果你的CSV字段有引号包裹,根据实际情况调整 TIMESTAMP_FORMAT = 'MM/DD/YYYY HH24:MI';
然后在COPY命令中直接使用这个文件格式,不用再写子查询转换:
copy into sales_order (sales, orderdate) from @sales_stage FILE_FORMAT = csv_sales_format;
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

