Преобразование существования в потоке данных для сопоставления

Область применения:Фабрика данных Azure Azure Synapse Analytics

Совет

Попробуйте использовать фабрику данных в Microsoft Fabric, решение для аналитики с одним интерфейсом для предприятий. Microsoft Fabric охватывает все, от перемещения данных до обработки и анализа данных в режиме реального времени, бизнес-аналитики и отчетности. Узнайте, как бесплатно запустить новую пробную версию !

Потоки данных доступны в конвейерах как Фабрики данных Azure, так и Azure Synapse. Эта статья относится к потокам данных для сопоставления. Если вы не знакомы с преобразованиями, см. вводную статью Преобразование данных с помощью потока данных для сопоставления.

Преобразование существования — это преобразование фильтрации строк, которое проверяет, существуют ли ваши данные в другом источнике или потоке. Выходной поток включает все строки в левом потоке, которые существуют или не существуют в правом потоке. Преобразование существования похоже на SQL WHERE EXISTS и SQL WHERE NOT EXISTS.

Настройка

  1. В раскрывающемся списке Right stream (Правый поток) выберите, в каком потоке данных проверять существование.
  2. Для параметра Exist type (Тип существования) укажите, ищете ли вы данные, которые существуют, или данные, которые не существуют.
  3. Выберите, нужно ли использовать настраиваемое выражение.
  4. Выберите в качестве условий существования ключевые столбцы, которые необходимо сравнить. По умолчанию поток данных ищет равенство между одним столбцом в каждом потоке. Чтобы выполнить сравнение с помощью вычисленного значения, наведите указатель мыши на раскрывающийся список столбцов и выберите Вычисляемый столбец.

Exists settings

Несколько условий существования

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

source1@column1 == source2@column1 && source1@column2 == source2@column2

Специальное выражение

Чтобы создать выражение произвольной формы, содержащее операторы, отличающиеся от and и equals to, выберите поле Настраиваемое выражение. Введите настраиваемое выражение с помощью построителя выражений потока данных, щелкнув синюю рамку.

Exists custom settings

При создании динамических шаблонов в потоках данных с помощью "поздней привязки" столбцов посредством смещения схемы можно применять функцию выражения byName(), чтобы использовать преобразование существования без жесткого программирования (т. е. раннего связывания) имен столбцов. Пример: toString(byName('ProductNumber','source1')) == toString(byName('ProductNumber','source2'))

Оптимизация вещания

Broadcast Join

При преобразованиях "Соединения", "Уточняющие запросы" и "Существование", если один или оба потока данных помещаются в память рабочего узла, можно оптимизировать производительность, включив Трансляцию. По умолчанию механизм Spark автоматически решает, следует ли транслировать одну сторону. Чтобы вручную выбрать сторону для трансляции, выберите Фиксированные.

Не рекомендуется отключать широковещательную трансляцию с помощью параметра Выкл., пока соединения не столкнутся с ошибками времени ожидания.

Скрипт потока данных

Синтаксис

<leftStream>, <rightStream>
    exists(
        <conditionalExpression>,
        negate: { true | false },
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <existsTransformationName>

Пример

Ниже представлен пример преобразования существования с именем checkForChanges, которое принимает левый поток NameNorm2 и правый поток TypeConversions. Условие существования — это выражение NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region, которое возвращает значение true, если столбцы EMPID и Region в каждом потоке совпадают. Так как проверяется существование, negate имеет значение false. Трансляции на вкладке оптимизации не разрешены, поэтому broadcast имеет значение 'none'.

В пользовательском интерфейсе это преобразование выглядит следующим образом:

Exists example

Скрипт потока данных для этого преобразования представлен в следующем фрагменте кода:

NameNorm2, TypeConversions
    exists(
        NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region,
	    negate:false,
	    broadcast: 'auto'
    ) ~> checkForChanges

Аналогичные преобразования: Поиск и Соединение.