Прочитать CSV-файл, который имеет столбец JSON в SSIS? - PullRequest
2 голосов
/ 23 февраля 2020

У меня есть следующий файл CSV, который имеет 4 столбца. Последний столбец addresses содержит историю двух адресов в формате JSON. Я пытался прочитать его в SSIS, но он разделяет JSON вместе с запятой (,) вместо группировки всех адресов в одном столбце.

Для этого я использую соединитель плоских файлов. Есть ли другой компонент источника для этого типа контента? Как я могу разобрать это в службах SSIS, чтобы было всего 4 столбца и все адреса отображались в одном столбце?

id,title,name,addresses
J44011,Mr,James,"{""address_line_1"": 45, ""post_code"": ""XY7 10PG""},{""address_line_1"": 15, ""post_code"": ""AB7 1HG""}"

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

Вы можете использовать компонент сценария для обработки JSON в своей собственной таблице подробностей.

Я создал следующий поток данных:

enter image description here

Вот шаги к компоненту скрипта:

На входах добавьте столбцы ID и адреса:

enter image description here

На входах и выходы: добавить новый вывод и создать столбцы (не забывайте программировать типы данных:

enter image description here

Сценарий:

public class Addresses
{
    public int address_line_1 { get; set; }
    public string post_code { get; set; }
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    //Test if addresses exist, if not leave the Row processing
    if (string.IsNullOrEmpty(Row.addresses)) return;        

    //Fix Json to make it an array of objects
    string json = string.Format("[{0}]", Row.addresses);

    //Load into an array of Addressses
    Addresses[] adds = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Addresses[]>(json);

    //Process the array
    foreach (var a in adds)
    {
        rowsAddressesBuffer.AddRow();
        rowsAddressesBuffer.ID = Row.id;
        rowsAddressesBuffer.Address1 = a.address_line_1;
        rowsAddressesBuffer.PostalCode = a.post_code;
    }
}

Примечания:

  1. Класс, добавленный для хранения результатов.
  2. Необходимо исправить JSON, чтобы создать массив объектов.
  3. Вам необходимо добавить ссылка на System.Web.Extensions.
  4. Это идет на загрузку. Убедитесь, что квалификатор текста определен как двойная кавычка (")
1 голос
/ 24 февраля 2020

Я пытался прочитать его в SSIS, но он разделяет JSON по запятой (,) вместо группировки всех адресов в одном столбце.

Для заставляет SSIS читать строку плоского файла в 4 столбцах , необходимо открыть диспетчер соединений с плоским файлом, go на вкладке «Дополнительно» и добавить только 4 столбца. Убедитесь, что длина последнего столбца равна 4000. Это заставит читать 4-й столбец, не разбивая его.

enter image description here

После импорта данных в SQL Сервер, вы можете проанализировать содержимое JSON, используя функцию OPEN JSON ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...