Snowflake 在 COPY INTO 转换过程中自动舍入数字

Snowflake automatically rounding number during COPY INTO transformation

我正在使用 AWS S3 阶段将 .csv 数据加载到我的 Snowflake 数据库中。

.csv 列如下:

我的 COPY INTO 命令是这样的:

copy into MY_TABLE(tot_completions, tot_hov, parent_id) 
from (select t., to_decimal(REPLACE(t., ',')), 1 from @my_stage t) 
pattern='.*file_path.*' file_format = my_file_format ON_ERROR=CONTINUE;

托特。 HOV 列分别自动舍入为 40 和 1。数据类型是小数,我也尝试将其作为浮点数,即使它们都应该能够存储小数。

我想要的结果是存储 .csv 上显示的小数而不四舍五入。任何帮助将不胜感激。

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

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