Сопоставление нескольких макетов из рабочей таблицы SQL — SSIS

#sql #sql-server #file #ssis #workflow

#sql #sql-server #файл #ssis #рабочий процесс

Вопрос:

В качестве входных данных у меня есть плоский файл с несколькими макетами:

 Client# FileType Data
------- --------  --------------------------------------
Client#1FileType0Dataxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
Client#1FileType1Datayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy  
Client#1FileType2Datazzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 
Client#2FileType0Dataxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 

Мой ЗАПЛАНИРОВАННЫЙ рабочий процесс выглядит следующим образом: удалите временную таблицу -загрузите временную таблицу SQL со столбцами Client #, FileType, Data, а затем оттуда сопоставьте мои 32 типа файлов с фактической постоянной таблицей SQL.

Мой вопрос в том, выполнимо ли это вообще и как бы вы поступили? Можете ли вы из такой рабочей таблицы разделить на 32 источника? С подстроками SQL? Я не уверен, как я буду сопоставлять свои столбцы из разных типов файлов из моей временной таблицы, какой «ящик» использовать в моем рабочем процессе.

Ответ №1:

То, что вы описываете, является очень разумным подходом к загрузке данных в базу данных. Идея заключается в:

  • Создайте промежуточную таблицу, в которой все столбцы являются строками.
  • Загрузите данные в итоговую таблицу, используя манипуляции с SQL.

Преимущество этого подхода заключается в том, что вы можете отлаживать любые аномалии данных в базе данных, и это, как правило, значительно упрощает задачу.

Ответ на ваш вопрос заключается в том, что следующие функции, как правило, очень полезны для этого:

  • substring()
  • try_convert()

Это может усложниться, если «данные» не имеют фиксированной ширины. В этом случае вам придется использовать более сложную обработку строк. В этом случае могут помочь рекурсивные функции CTE или JSON.