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

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

Совет

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

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

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

Alter row settings

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

Примечание.

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

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

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

Alter row policy

Примечание.

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

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

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

Alter row policies

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

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

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

Alter row sink

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

Примечание.

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

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

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

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

Но иногда схема целевой базы данных использует свойство identity из ключевых столбцов. Служба требует указать ключи, которые будут использоваться для сопоставления значений строк при операциях обновления и удаления. Но если для целевого столбца задано свойство identity и используется политика 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 example

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

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

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