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
我正在使用 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