Для своей разработки я использую поток данных Фабрики данных Azure.
У меня есть исходная таблица со строками «D», «I» и «U». Я хочу разделить строки «D» из «U» и «I» и загрузить их отдельно в две разные папки.
Я использовал условное разделение потока данных Azure, чтобы разделить их, и указал потоки на разные потоки и приемники соответственно: приемник удаления для строк «D» и приемник InsertUpdate для строк «I» и «U».
Мой конвейер динамический, я не импортировал никакую схему и не хочу, и все столбцы перемещаются по потоку данных от источника к приемнику. Условное разделение также выполняется с помощью функции byName() внутри построителя выражений.
Моя проблема, например, в том, что если нет строк «D», ни один столбец не будет перемещаться в приемник «Удалить», это выдает ошибку, указывающую: «приемник не может иметь 0 столбцов».
Пожалуйста, помогите мне решить эту проблему, если возможно, предоставьте пошаговое текстовое/визуальное объяснение решения моей проблемы.
Привет @Aswin, да, смещение схемы включено для обоих приемников: приемника удаления и приемника обновления, но ни одна схема не перейдет в приемник из-за условного разделения, если из источника нет строк «D».


Моя проблема, например, в том, что если нет строк «D», ни один столбец не будет перемещаться в приемник «Удалить», это выдает ошибку, указывающую: «приемник не может иметь 0 столбцов».
Преобразование Условное разделение таким образом не сработает. Он будет разделять строки только на основе условия, и если нет строк, удовлетворяющих данному условию, будут созданы пустые строки с той же исходной схемой. Те же столбцы из источника будут переданы в целевой объект, но в нем не будет строк.
Следуйте приведенной ниже пошаговой процедуре для достижения вашего требования.
Вот мой пример исходных данных:
one,two
I,2
U,3
I,5
I,6
U,7
U,8
Я использовал условное разделение источника с приведенными ниже условиями. Здесь схема не была спроектирована в источнике так же, как ваша.
InsertUpdate - or(equals(toString(byName('one')),'I'),equals(toString(byName('one')),'U'))
Delete - equals(toString(byName('one')),'D')

Я добавил соответствующие приемники в два потока.


При выполнении из конвейера он будет генерировать файлы, подобные приведенным ниже.
Файл InsertUpdate.csv:

Если в источнике нет строк D, он создаст файл delete.csv с заголовками источника (если заголовок firstRow проверен в наборе данных приемника) и без строк, как показано ниже.

Если первая строка в качестве заголовка отключена в наборе данных приемника, будет создан пустой файл delete.csv.
Убедитесь, что вы проверили Schema drift в источнике, а также в обоих приемниках.
Привет @Rakesh Govindula, странно, у меня это не работает, могу ли я узнать, дали ли вы проекцию импорта при преобразовании источника здесь, в вашем примере?
Нет, я не делал никаких прогнозов. Вы можете увидеть количество столбцов 0 в преобразовании условного разделения. Я пробовал использовать данные с необходимыми D и без этих строк. Это сработало в обоих случаях. Даже я пробовал использовать столбцы различий, это сработало, как и ожидалось.
Попробуйте запустить поток данных из конвейера и проверьте, дает ли целевой файл желаемый результат или нет. Иногда отладка вызывает некоторые проблемы.
Я попробовал запустить отладку, позвольте мне запустить среду выполнения активности и вернуться к вам по этому поводу.
Спасибо, @rakesh-govindula, сейчас почему-то работает, давно не работало. Ценю вашу помощь!
Отлично, это сработало для вас :).
Вы выбрали «Разрешить дрейф схемы в стоке»?