Копирование данных фабрики данных из REST в хранилище таблиц - PartitionKey null [объект / массив] - PullRequest
0 голосов
/ 13 января 2019

Добрый день,

Мы импортируем следующий формат JSON через COPY DATA (REST TO TABLE STORAGE) в Data Factory v2:

[  
   {  
      "ERROR":false,
      "USERNAME":"DUMMY"
   },
   [  
      {  
         "A":1,
         "B":2,
         "C":3
      },
      {  
         "A":1,
         "B":0,
         "C":3
      }
   ]
]

Значение ключа раздела: USE SOURCE COLUMN

Столбец ключа раздела: C

Отображение правильно установлено для A B and C. ОШИБКА и ИМЯ ПОЛЬЗОВАТЕЛЯ - Не включены -.

При отладке выдает следующую ошибку:

"errorCode": "2200", "message": "Сбой произошел на стороне 'Sink'. ErrorCode = UserErrorAzureTableKeyColumnWithNullValue, 'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message = Column «C» содержит значение «NULL», поэтому его нельзя использовать как «PartitionKey» для Лазурный стол.

Я понимаю, почему возникает ошибка, инструмент COPY DATA пытается создать три строки:

1.Первая строка основана на ОШИБКАХ и ИМЯ ПОЛЬЗОВАТЕЛЯ. Эта строка действительно имеет значение null для C

2. Вторая строка основана на A, B и C. Эта строка верна, поскольку для C. нет нулевых значений.

3. Третья строка основана на A, B и C. Эта строка верна, поскольку для C. нет нулевых значений.

Отказоустойчивость включена: пропускает несовместимые строки, но не решает проблему.

Мы знаем выше, потому что он работает со значением ключа раздела по умолчанию:

Снимок экрана в два ряда

Мы не можем изменить формат ввода. Что мы можем сделать в фабрике данных, чтобы решить эту проблему? Как мы можем игнорировать первый объект с ОШИБКАМИ и ПОЛЬЗОВАТЕЛЕМ, или как мы можем пропустить строки с Ключом Разделения, если ноль?

Может ли это быть обработано с помощью кода "Динамическое содержимое"?

1 Ответ

0 голосов
/ 14 января 2019

Синдбад. Основываясь на моем тесте, нет прямого способа пропустить определенные строки в операции копирования REST-TableStorage.

Моя идея заключается в том, что вы могли бы использовать Действие функции Azure , чтобы сначала обработать ваши остальные API-данные.

Пожалуйста, обратитесь к следующим шагам:

1.Создайте Триггер Http в Azure Funtion, получите доступ к API отдыха и получите данные.

2.В этой функции Azure зациклите данные и удалите строки "ERROR" и "USERNAME", чтобы получить массив, содержащий только "A" "B" "C".

3.Выполнить функцию в фабрике данных Azure с действием функции Azure, затем связать с операцией копирования.

enter image description here

Больше не будет несовместимых строк.

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