パイプラインの実行の間にランタイムデータをAzureData Factoryに保存するにはどうすればよいですか?

Nov 23 2020

私はMicrosoftのチュートリアルに従って、SQLServerデータベースからデータをインクリメンタル/デルタロードしています。

透かし(タイムスタンプ)を使用して、前回以降に変更された行を追跡します。チュートリアルでは、パイプラインの「ストアドプロシージャ」アクティビティを使用して透かしをAzure SQLデータベースに保存し、次の実行で再利用できるようにします。

ほんの少しのメタ情報を格納するためだけにAzureSQLデータベースを用意するのはやり過ぎのようです(私のソースデータベースは読み取り専用です)。それをAzureの別の場所に保存したいだけです。たぶんブロブストレージか何かに。

つまり、このタイプのデータを追跡する簡単な方法はありますか、それともストアドプロシージャ(またはAzure Functionsなど)の使用に制限されていますか?

回答

1 JasonWright Nov 24 2020 at 02:46

私は非常によく似たシナリオに出くわしましたが、私が見つけたところから、透かし情報をADFに保存することはできません。少なくとも、簡単にアクセスできる方法ではありません。

最終的に、パイプラインですでに使用しているSQLサーバーに透かし/構成情報を格納するための基本的な層のAzureSQLデータベースを作成しました。

これの良い点は、ソリューションがすべて異なるデータベースを持つ複数のビジネスユニットにスケールアウトした場合でも、特定の透かし情報の対象となるBUを追跡する列を追加するだけで、各ビジネスユニットの透かし情報を維持できることです。

BLOBストレージは確かに安価なオプションですが、既存のデータベースで追加のデータベース/テーブルを使用するよりも少し手間がかかることがわかりました。

小さな構成アイテム用にADF自体に小さなデータセットを維持できると非常に便利であることに同意します。おそらくMicrosoftに提案することをお勧めします。

1 SteveZhao Nov 24 2020 at 09:01

コピーアクティビティを使用してこれを実現する方法はありますが、参考のために、「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によって生成されます。「11/24/202008: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)))]