如何将数据从外部阶段复制到表中时将日期时间转换为雪花时间戳?

问题描述 投票:0回答:2

我正在尝试将数据从外部阶段(天蓝色)复制到雪花中的表

文件格式为 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

#预期

有什么解决方案可以将订单日期加载/转换为雪花中相应的日期时间格式吗?

snowflake-cloud-data-platform snowflake-schema
2个回答
0
投票

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'); 这有效。


0
投票

在 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

在上面的示例中,您必须像这样指定格式

© www.soinside.com 2019 - 2024. All rights reserved.