【问题标题】:How to load 533 columns of data into snowflake table?如何将 533 列数据加载到雪花表中?
【发布时间】:2020-05-21 13:17:16
【问题描述】:

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

我们对这两个作业分别使用一个复制命令和一个 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;

插入命令

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>;

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的及时帮助。
    • 非常感谢您的及时帮助。而且我们在这些表中大约有 5000 万条记录。您对有效的跑步方式有何建议。以及根据数据大小选择计算能力(磨损室)的任何计算。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2020-10-07
    • 2021-07-18
    • 2022-01-15
    • 2020-06-27
    • 2022-12-06
    • 2020-11-13
    相关资源
    最近更新 更多