Поделиться через


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

ОБЛАСТЬ ПРИМЕНЕНИЯ: Фабрика данных Azure Azure Synapse Analytics

Совет

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

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

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

Параметры изменения строки

Изменение преобразований строк работает только с приемниками базы данных, REST или Azure Cosmos DB в потоке данных. Действия, назначенные строкам (вставка, обновление, удаление, upsert) не происходят во время сеансов отладки. Чтобы принять политики изменений строк в таблицах базы данных, выполните действие Execute Поток данных в конвейере.

Примечание.

Преобразование alter Row не требуется для потоков данных отслеживания измененных данных, использующих собственные источники CDC, такие как SQL Server или SAP. В этих экземплярах ADF автоматически обнаруживает маркер строки, поэтому политики alter Row не нужны.

Указание политики строк по умолчанию

Создайте преобразование изменения строк и укажите политику строк с условием true(). Каждая строка, которая не соответствует ранее определенным выражениям, помечается для указанной политики строк. По умолчанию каждая строка, которая не соответствует условному выражению, помечается для Insert.

Политика изменения строк

Примечание.

Чтобы пометить все строки одной политикой, создайте условие для этой политики и обозначьте это условие как true().

Просмотр политик в режиме предварительного просмотра данных

Используйте режим отладки, чтобы в области просмотра данных изучить результаты применения политик изменения строк. Предварительный просмотр данных преобразования alter row не создает действия DDL или DML для целевого объекта.

Политики изменения строк

Значок для каждой политики изменения строк указывает, происходит ли действие insert, update, upsert или deleted. Верхний заголовок показывает, сколько строк каждой политики влияет на предварительную версию..

Включение политик изменения строк в приемнике

Чтобы изменить политики строк для работы, поток данных должен записываться в базу данных или приемник Azure Cosmos DB. На вкладке Параметры для этого приемника укажите, какие политики изменения строк допустимы для этого приемника.

Приемник изменения строк

По умолчанию допускаются только политики вставки. Чтобы разрешить обновления, вставки с обновлением и (или) удаления, установите для приемника флажки, соответствующие этим условиям. Если вы разрешите операции обновления, вставки с обновлением и (или) удаления, необходимо указать в приемнике ключевые столбцы, по которым проверяется соответствие.

Примечание.

Если при операциях вставки, обновления или вставки с обновлением будет выполняться попытка изменить схему целевой таблицы в приемнике, поток данных завершится ошибкой. Чтобы изменить схему целевой таблицы в базе данных, выберите действие повторного создания таблицы. Это действие позволяет удалить таблицу и заново создать ее с новым определением схемы.

Чтобы преобразовать приемник, необходимо указать один или несколько ключей для уникальной идентификации строк в целевой базе данных. Для приемников SQL задайте ключи на вкладке параметров приемника. Для Azure Cosmos DB задайте ключ секции в параметрах и задайте в сопоставлении приемника поле системы Azure Cosmos DB .ID. Для Azure Cosmos DB необходимо включить системный столбец "ID" для обновлений, upserts и удаления.

Операции слияния и вставки с обновлением в Базе данных SQL Azure и Azure Synapse

Потоки данных поддерживают операции слияния для Базы данных SQL Azure и пула баз данных Azure Synapse (хранилище данных) с возможностью вставки с обновлением (upsert).

Однако вы можете столкнуться с сценариями, в которых схема целевой базы данных использовала свойство удостоверения ключевых столбцов. Служба требует определить ключи, используемые для сопоставления значений строк для обновлений и upserts. Но если целевой столбец имеет набор свойств удостоверения, и вы используете политику upsert, целевая база данных не позволяет записывать данные в столбец. Кроме того, могут возникнуть ошибки при попытке вставки с обновлением, которая затрагивает столбец распределения распределенной таблицы.

Устранить эту проблему можно следующими способами:

  1. Откройте параметры преобразования для этого приемника и установите флажок Skip writing key columns (Пропустить запись ключевых столбцов). Это указывает службе не записывать столбец, выбранный в качестве ключевого значения для сопоставления.

  2. Если этот ключевой столбец не является столбцом, вызывающим проблему для столбцов удостоверений, можно использовать параметр препроцессирования SQL преобразования приемника: SET IDENTITY_INSERT tbl_content ON Затем отключите его с помощью свойства SQL для пост-обработки: SET IDENTITY_INSERT tbl_content OFF.

  3. Для обоих вариантов (с использованием свойства identity или столбца распределения) можно изменить логику, заменив Upsert отдельными условиями обновления и вставки через преобразование условного разбиения. Так вы можете задать для пути обновления сопоставление, в котором игнорируется сопоставление ключевых столбцов.

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

Синтаксис

<incomingStream>
    alterRow(
           insertIf(<condition>?),
           updateIf(<condition>?),
           deleteIf(<condition>?),
           upsertIf(<condition>?),
        ) ~> <alterRowTransformationName>

Пример

Ниже приведен пример преобразования изменения строк с именем CleanData. В примере принимается входящий поток SpecifyUpsertConditions и создается три условия изменения строк. В предыдущем преобразовании вычисляется столбец с именем alterRowCondition, который определяет, будет ли выполняться операция обновления, вставки с обновлением и (или) удаления в базе данных. Если значение столбца имеет строковое значение, соответствующее правилу alter row, оно назначается этой политике.

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

Пример изменения строк

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

SpecifyUpsertConditions alterRow(insertIf(alterRowCondition == 'insert'),
	updateIf(alterRowCondition == 'update'),
	deleteIf(alterRowCondition == 'delete')) ~> AlterRow

После преобразования Alter Row может потребоваться приемник данных в целевое хранилище данных.