如何将533列数据加载到雪花表中?

时间:2020-05-21 13:17:16

标签: snowflake-cloud-data-platform snowflake-schema snowflake-task snowflake-stream snowflake-pipe

我们有一个包含533列的表,其中许多LOB列必须移至雪花。由于我们的源转换系统在一个工作中管理533列的问题。我们将列分为2个工作。第一个作业将插入283列,第二个作业需要更新剩余的列。

对于这两个作业,我们分别使用一个copy命令和upsert命令。

复制命令

copy into "ADIUATPERF"."APLHSTRO"."FNMA1004_APPR_DEMO" (283 columns) from @"ADIUATPERF"."APLHSTRO".fnma_talend_poc/jos/outformatted.csv
--file_format = (format_name = '"ADIUATPERF"."APLHSTRO".CSV_DQ_HDR0_NO_ESC_CARET');
FILE_FORMAT = (DATE_FORMAT='dd-mm-yyyy', TIMESTAMP_FORMAT='dd-mm-yyyy',TYPE=CSV, ESCAPE_UNENCLOSED_FIELD = NONE,
SKIP_HEADER=1, field_delimiter ='|', RECORD_DELIMITER = '\\n', FIELD_OPTIONALLY_ENCLOSED_BY = '"',
               NULL_IF = ('')) PATTERN='' on_error = 'CONTINUE',FORCE=true;

Upsert命令

MERGE INTO db.schema._table as target 
 USING
(SELECT t.$1
from @"ADIUATPERF"."APLHSTRO".fnma_talend_poc/jos/fnma1004_appr.csv 
--file_format = (format_name = '"ADIUATPERF"."APLHSTRO".CSV_DQ_HDR0_NO_ESC_CARET');
(FILE_FORMAT =>'CSV', ESCAPE_UNENCLOSED_FIELD => NONE,
SKIP_HEADER=>1, field_delimiter =>'|', RECORD_DELIMITER => '\\n', FIELD_OPTIONALLY_ENCLOSED_BY => '"',
               NULL_IF => (''))

) source ON target.document_id = source.document_id
WHEN MATCHED THEN
--update lst_updated
UPDATE SET <columns>=<values>;

我想知道我们是否还有其他选择?

1 个答案:

答案 0 :(得分:0)

我建议您首先将两个拆分文件运行COPY INTO到临时表/瞬态表中。然后使用document_id上这两个表之间的JOIN执行单个CTAS语句。不要MERGE来自平面文件。如果愿意,可以选择将第二个临时表上的MERGE运行到第一个表(不是临时表)中,但是我认为从两个“半”表中直接获取CTAS可能会更快。