如何加载533列数据到snowflaketable?
How to load 533 columns of data into snowflake table?
我们有一个包含 533 列的 table,其中有很多 LOB 列必须移动到 snowflake。由于我们的源转换系统在一次作业中管理 533 列时出现问题。我们已将列拆分为 2 个作业。第一个作业将插入 283 列,第二个作业需要更新剩余的列。
我们对这两个作业分别使用一个复制命令和更新插入命令。
复制命令
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;
更新命令
MERGE INTO db.schema._table as target
USING
(SELECT t.
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>;
我想知道我们是否还有其他选择?
我建议您首先 运行 将 COPY INTO
的两个文件拆分为 temp/transient table。然后使用 document_id
上的 2 table 之间的 JOIN 执行单个 CTAS 语句。不要 MERGE
来自平面文件。如果你愿意,你可以选择在第二个温度 table 中 运行 a MERGE
进入第一个 table (不是温度),但我认为直接 CTAS 来自 2 "half" tables 对你来说可能更快。
我们有一个包含 533 列的 table,其中有很多 LOB 列必须移动到 snowflake。由于我们的源转换系统在一次作业中管理 533 列时出现问题。我们已将列拆分为 2 个作业。第一个作业将插入 283 列,第二个作业需要更新剩余的列。
我们对这两个作业分别使用一个复制命令和更新插入命令。
复制命令
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;
更新命令
MERGE INTO db.schema._table as target
USING
(SELECT t.
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>;
我想知道我们是否还有其他选择?
我建议您首先 运行 将 COPY INTO
的两个文件拆分为 temp/transient table。然后使用 document_id
上的 2 table 之间的 JOIN 执行单个 CTAS 语句。不要 MERGE
来自平面文件。如果你愿意,你可以选择在第二个温度 table 中 运行 a MERGE
进入第一个 table (不是温度),但我认为直接 CTAS 来自 2 "half" tables 对你来说可能更快。