Пошаговое использование управления транзакциями с произвольным именем выходного файла в Informatica

Создается впечатление, что разработчикам Informatica требуется пошаговое руководство по использованию преобразования управления транзакциями в отображении, в котором предполагаемый разрыв заключается в создании различных файлов по мере того, как записи получают вывод из TC. Взяв за пример общую потребность в создании нового файла для каждого x количества выходных записей, я решил собрать этот пример вместе. Прежде чем попробовать свои силы в этом самостоятельно, я бы очень хотел, чтобы у меня было пошаговое руководство, так как потребовалось несколько дней, чтобы все заработало. «Это не должно быть так сложно», как говорится, и я с этим согласен. Поэтому я надеюсь, что это поможет другим.

ПРОБЛЕМА: у вас есть сопоставление, которое должно выводить большое количество записей. Вашему внутреннему клиенту нужен файл .csv, который вы можете достаточно легко предоставить, но он хочет иметь возможность импортировать каждый файл .csv на отдельный рабочий лист Excel. Они сделают импорт, но не хотят разбивать большой выходной файл вручную, так как это немного превышает их уровень технических навыков, и у них нет желания учиться использовать редактор файлов с большим объемом, чтобы открыть выходной файл, а затем скопируйте и вставьте каждое количество записей «x», где «x» является числом, удобным для Excel. Таким образом, они хотят, чтобы выходные данные доставлялись им уже разбитыми на удобные для Excel файлы .csv, каждый файл содержал 65 000 записей, что близко к лимиту строк Excel*. Как вы можете убедиться, что файлы автоматически разбиваются с шагом в 65 000 записей, а новый файл с уникальным именем создается в каждой точке с 65 000 записей?


*Ранее версия Excel имеют ограничение чуть более 65 500 строк на лист. Однако более поздние версии. не. Ради этого примера я предполагаю, что вы работаете в компании. который использует более старую версию. Excel, который имеет этот предел записи на рабочий лист. (Самая последняя версия Excel позволяет разместить чуть более миллиона строк на листе. Дополнительную информацию см. по этой ссылке: https://superuser.com/questions/366468/what-is-the-maximum.-разрешенные-строки-в-Microsoft-Excel-xls-or-xlsx )


person Matt Campbell    schedule 04.06.2015    source источник
comment
Если ваша ОС UNIX, то это можно сделать с помощью простой команды SPLIT. Просто предложение Дж.   -  person Nav    schedule 09.06.2015
comment
Да, можно использовать команду Unix для разделения файла, как вы предлагаете. Не все Информ. ppl хорошо разбираются в Unix, или в некоторых местах по какой-то причине (безопасность и т. д.) может быть политика запрета использования оболочки. Но это хорошая альтернатива для мест, которые разрешают и поощряют использование оболочки из сеансов.   -  person Matt Campbell    schedule 09.06.2015


Ответы (1)


РЕШЕНИЕ:

  1. Сначала вам нужно будет добавить поддержку пользовательского имени файла для целевого файла в сопоставлении. Сделайте это, отредактировав целевой файл так, чтобы к нему был добавлен специальный порт FileName. Это можно сделать, перейдя к списку портов в целевом объекте и щелкнув заштрихованную букву «F» чуть выше и в правом верхнем углу области списка целевых портов. Появится порт «Имя файла», он будет иметь фиксированную длину 255 и будет затенен. Это не редактируется пользователем. Сохраните цель и зарегистрируйте ее. Затем вернитесь к отображению, над которым вы работаете. При необходимости обновите представление, чтобы новый целевой порт FileName появился в списке целевых портов в сопоставлении.
  2. Добавьте преобразование выражения в свое сопоставление и подключите порты, которые вы хотите подключить к нему, которые в конечном итоге будут подключены к преобразованию управления транзакциями.
  3. Отредактируйте список портов на вкладке «Порты» в преобразовании выражения, чтобы добавить порт строковой переменной с именем «PhysicalFileName» и длиной 255; сделайте его первым портом в списке портов. Его значение Expression должно быть первой частью имени файла, которое вы хотите использовать для выходных файлов. Например, если я хочу, чтобы мои выходные файлы назывались в форме «ABCReport_x.csv», где x — число, такое как 1, 2, 3 (например: «ABC_Report_1.csv», «ABC_Report_2.csv» и т. д.) , это значение, которое я бы использовал:

    'ABC_Report_'
    

Затем добавьте еще один целочисленный порт переменного типа с именем 'var_recordcount' и для его значения Expression укажите следующее:

    var_recordcount + 1

Затем добавьте еще один порт строки типа переменной с именем 'var_filenumber' и для его значения Expression укажите следующее:

    IIF(MOD(var_recordcount,65000)=0, to_char((var_recordcount/65000)+1), IIF(var_filenumber='','1',var_filenumber))

Теперь добавьте еще один целочисленный порт переменного типа с именем 'var_new_FN_flag' и для его значения Expression укажите следующее:

    IIF(var_prev_FN = (PhysicalFileName || var_filenumber), 0, 1)

(Обратите внимание, что «var_prev_FN» еще не определен, но он будет следующим портом, поэтому нажмите «ОК», если вы получите запрос на синтаксический анализ, приняв введенное значение выражения как есть.)

А затем сразу после этого добавьте еще один строковый порт переменного типа с именем «var_prev_FN» с длиной 255 и значением Expression:

    PhysicalFileName || var_filenumber

После этого порта добавьте еще один выходной порт строки типа с именем «o_Physical_File_Name» длиной 255 и значением Expression:

    PhysicalFileName || var_filenumber || '.csv'

Наконец, после этого добавьте еще одно целое число типа выходного порта с именем «o_new_FN_flag» со значением Expression:

    var_new_FN_flag

После этих портов должны быть перечислены остальные порты, которые вы хотите видеть в выходных файлах; обратите внимание, что мы заботимся о различных манипуляциях с переменными и т. д. в верхней части списка портов и только в конце перечисляем выходные порты после манипулирования/установки этих переменных. Нажмите «Применить» и «ОК» на вкладке «Порты», чтобы закрыть диалоговое окно «Редактировать преобразования».

  1. Добавьте преобразование управления транзакциями и подключите к нему все порты вывода из преобразования выражения на шаге 3. Преобразование управления транзакциями должно иметь два порта, созданных для управления именем выходного файла: o_new_FN_flag и o_Physical_File_Name. В поле «Условие управления транзакциями» преобразования управления транзакциями его значение должно выглядеть так:

    IIF(o_new_FN_flag = 0,TC_CONTINUE_TRANSACTION,TC_COMMIT_BEFORE)
    

Нажмите «Применить», затем «ОК», чтобы закрыть диалоговое окно «Редактировать преобразования» для преобразования управления транзакциями.

  1. Подключите все порты в преобразовании управления транзакциями к целевому файлу, кроме порта 'o_new_FN_flag'. Порт «o_Physical_File_Name» соединяется с портом «FileName» целевого объекта, а основные порты, которые у вас есть в преобразовании управления транзакциями, направляются туда, куда им нужно в целевом файле.

Это должно сработать. Если вы будете следовать этим указаниям и у вас возникнут проблемы, не стесняйтесь публиковать. Я буду отслеживать этот пост, чтобы увидеть, как он идет для других. (Иногда Informatica может, как мы знаем, быть очень привередливой....). Последнее замечание: первый выходной файл будет содержать 64 999 строк. Остальные вмещают 65 000. Есть способ настроить логику так, чтобы первый файл также содержал 65 000 строк, но это пример. Добавление этой части прыгающих надежд только испортит уже задействованный пример.

person Matt Campbell    schedule 04.06.2015
comment
Добавление к вышесказанному: в этом случае вы должны использовать TC_COMMIT_AFTER. Порт имени файла должен быть создан при определении цели Informatica Flat_File. - person Nav; 09.06.2015
comment
Привет, Навьот, я использую TC_COMMIT_BEFORE, и у меня нет проблем. Я также добавил порт FileName после первоначального создания цели, хотя, конечно, тогда сопоставления, использующие его, должны быть обновлены, чтобы приспособиться к новому состоянию, в котором он находится. Однако, что касается времени фиксации, каков был ваш опыт с ним, который привел вас к сделать вывод, что ПОСЛЕ необходимо в этом случае? - person Matt Campbell; 09.06.2015
comment
Вы правы ДО выглядит нормально. Я переосмыслил это. Дж - person Nav; 10.06.2015