Как загрузить 533 столбца данных в таблицу снежинок?
У нас есть таблица с 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;
Команда 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 ответ
Я бы порекомендовал вам запустить COPY INTO
для обоих ваших файлов, разделенных на временные / переходные таблицы, сначала. А затем выполните один оператор CTAS, используя JOIN между этими двумя таблицами наdocument_id
. Не надоMERGE
из плоского файла. При желании вы можете запуститьMERGE
из 2-й таблицы temp в первую таблицу (не temp), если хотите, но я думаю, что прямой CTAS из 2-х "половинных" таблиц может быть для вас быстрее.