Как хранить данные времени выполнения в фабрике данных Azure между выполнениями конвейера?

Я следил за руководством от Microsoft для инкрементальной / дельта-загрузки данных из базы данных SQL Server.

Он использует водяной знак (отметку времени), чтобы отслеживать измененные строки с момента последнего. В учебнике водяной знак сохраняется в базе данных SQL Azure с помощью действия хранимой процедуры в конвейере, чтобы его можно было повторно использовать при следующем выполнении.

Кажется излишним иметь базу данных Azure SQL только для хранения этого крошечного бит метаинформации (моя исходная база данных, кстати, доступна только для чтения). Я бы предпочел просто хранить это где-нибудь еще в Azure. Может быть, в хранилище BLOB-объектов или что-то в этом роде.

Вкратце: есть ли простой способ отслеживать этот тип данных или мы ограничены использованием для этого сохраненных процедур (или функций Azure и др.)?

введите описание изображения здесь


person Martin Wickman    schedule 23.11.2020    source источник


Ответы (2)


Я столкнулся с очень похожим сценарием, и из того, что я обнаружил, вы не можете хранить какую-либо информацию о водяных знаках в ADF - по крайней мере, таким способом, к которому вы можете легко получить доступ.

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

Самое приятное в этом то, что когда мое решение было масштабировано на несколько бизнес-единиц, все с разными базами данных, я все еще мог поддерживать информацию о водяных знаках для каждого из них, просто добавляя столбец, который отслеживает, для каких BU эта конкретная информация о водяных знаках была.

Хранилище BLOB-объектов действительно более дешевый вариант, но я обнаружил, что это требует немного больше усилий, чем просто использование дополнительной базы данных / таблицы в существующей базе данных.

Я согласен, что было бы действительно полезно иметь возможность поддерживать небольшой набор данных в самом ADF для небольших элементов конфигурации - вероятно, это хорошее предложение для Microsoft!

person Jason Wright    schedule 24.11.2020

Есть способ добиться этого с помощью действия копирования, но получить последний водяной знак в LookupOldWaterMarkActivity сложно, просто для справки.

Настройка набора данных:

введите описание изображения здесь

Настройки копирования:

Набор данных источника и приемника один и тот же. Измените выражение в дополнительных столбцах на @{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}

введите описание изображения здесь

Благодаря этому вы можете сохранить водяной знак в виде столбца в файле .txt. Но получить последний водяной знак с помощью функции поиска сложно. Потому что ваш результат LookupOldWaterMarkActivity будет таким:

{
    "count": 1,
    "value": [
        {
            "Prop_0": "11/24/2020 02:39:14",
            "Prop_1": "11/24/2020 08:31:42"
        }
    ]
}

Имя ключа генерируется ADF. Если вы хотите получить 24/11/2020 08:31:42, вам нужно получить количество столбцов, а затем использовать такое выражение: @activity('LookupOldWaterMarkActivity').output.value[0][Prop_(column count - 1)]

Как получить последний водяной знак:

  1. используйте действие GetMetadata, чтобы получить columnCount  введите описание изображения здесь

  2. используйте это выражение: @activity('LookupOldWaterMarkActivity').output.value[0][concat('Prop_',string(sub(activity('Get Metadata1').output.columnCount,1)))]

person Steve Zhao    schedule 24.11.2020