【发布时间】:2021-11-23 05:17:06
【问题描述】:
我正在使用 AWS S3 阶段将 .csv 数据加载到我的 Snowflake 数据库中。
.csv 列如下:
我的 COPY INTO 命令是这样的:
copy into MY_TABLE(tot_completions, tot_hov, parent_id)
from (select t.$1, to_decimal(REPLACE(t.$2, ',')), 1 from @my_stage t)
pattern='.*file_path.*' file_format = my_file_format ON_ERROR=CONTINUE;
托特。 HOV 列分别自动四舍五入为 40 和 1。数据类型是十进制,我也尝试将它作为浮点数,即使它们都应该能够存储小数。
我想要的结果是存储 .csv 上显示的小数,而不进行四舍五入。任何帮助将不胜感激。
【问题讨论】:
-
除了下面的答案之外,如果可以的话,您可能还需要考虑在 COPY INTO 语句之后进行此转换。实际上,直接加载数据然后作为第二步进行转换比在 COPY 命令中执行它...通常更快。对于一个小的 2 列文件,可能没有什么不同。具有大量转换的较大文件,它会。
-
感谢您的建议。你会如何建议这样做?一种。为要发生的转换创建临时表或 b。直接在主表中转换?
-
是的 - 一个临时阶段表,因此您不必每次都创建它。然后你要么在加载之前截断,要么在表上使用流(如果你想在暂存表中保留原始数据的持久副本)。
标签: sql database snowflake-cloud-data-platform snowflake-schema