【问题标题】:Snowflake automatically rounding number during COPY INTO transformationSnowflake 在 COPY INTO 转换期间自动舍入数字
【发布时间】: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


【解决方案1】:

您需要指定精度和小数位数:

create or replace table number_conv(expr varchar);
insert into number_conv values ('12.3456'), ('98.76546');

select expr, to_number(expr),  to_number(expr, 10, 1), to_number(expr, 10, 8) from number_conv;

+----------+-----------------+------------------------+------------------------+
| EXPR     | TO_NUMBER(EXPR) | TO_NUMBER(EXPR, 10, 1) | TO_NUMBER(EXPR, 10, 8) |
|----------+-----------------+------------------------+------------------------|
| 12.3456  |              12 |                   12.3 |            12.34560000 |
| 98.76546 |              99 |                   98.8 |            98.76546000 |
+----------+-----------------+------------------------+------------------------+

和:

select column1,
       to_decimal(column1, '99.9') as d0,
       to_decimal(column1, '99.9', 9, 5) as d5,
       to_decimal(column1, 'TM9', 9, 5) as td5
from values ('1.0'), ('-12.3'), ('0.0'), ('  - 0.1   ');

+---------+-----+-----------+-----------+
| COLUMN1 |  D0 |        D5 |       TD5 |
|---------+-----+-----------+-----------|
| 1.0     |   1 |   1.00000 |   1.00000 |
| -12.3   | -12 | -12.30000 | -12.30000 |
| 0.0     |   0 |   0.00000 |   0.00000 |
| - 0.1   |   0 |  -0.10000 |  -0.10000 |
+---------+-----+-----------+-----------+

查看更多here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2021-05-28
    • 2020-10-26
    • 1970-01-01
    • 2015-01-19
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多