#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.