我正在尝试将数据从外部阶段(天蓝色)复制到雪花中的表
文件格式为 csv,其中包含日期列 - orderdate('2/24/2003 0:00') 。
我创建了表 - sales_order,其数据类型为“timestamp”,列为“orderdate”
#sales_order 的 csv 文件
| sales | orderdate |
| -------- | --------------|
| 2871 | 2/24/2003 0:00|
| 3211 | 2/25/2003 0:00|
我使用下面的复制命令将数据从外部阶段复制到表
copy into sales_order (sales, orderdate) from (select t.$1, to_timestamp_ntz(t.$2) from @sales_stage t)
但是复制失败并出现以下错误
Timestamp '2/24/2003 0:00' is not recognized
#预期
有什么解决方案可以将订单日期加载/转换为雪花中相应的日期时间格式吗?
orderdate 列的格式需要具有正确的时间信息,例如
如果您尝试在 Orderdata 列中添加秒信息并尝试转换,它应该可以工作 您的订购日期列应如下所示 |销售|订单日期 | | -------- | --------------| | 2871 | 2871 2003 年 2 月 24 日 00:00:00| | 3211 | 3211 2003 年 2 月 25 日 00:00:00|
如果您尝试使用指定的数据格式进行数据转换,它将失败
您可以尝试这个简单的代码来测试 选择 to_timestamp_ntz('2/24/2003 0:00', 'mm/dd/yyyy hh24:mi:ss'); 因错误而失败 - 无法将“2/24/2003 0:00”解析为格式为“mm/dd/yyyy hh24:mi:ss”的时间戳
如果你现在尝试这个代码 选择 to_timestamp_ntz('2/24/2003 00:00:00', 'mm/dd/yyyy hh24:mi:ss'); 这有效。
在 Snowflake 中,在将 varchar 转换为日期或时间时,用户必须指定 日期/时间戳格式如 varchar 中的:yyyy/mm/dd hh:mi:ss
select to_timestamp_ntz('2/24/2003 0:00','mm/dd/yyyy hh:mi');
-- solution
copy into sales_order (sales, orderdate) from (select t.$1, to_timestamp_ntz(t.$2, 'mm/dd/yyyy hh:mi') from @sales_stage t);
TO_TIMESTAMP_NTZ('2003/2/24 0:00','MM/DD/YYYY HH:MI') |
---|
2003-02-24 00:00:00.000 |
在上面的示例中,您必须像这样指定格式