Jak przechowywać dane czasu wykonywania w Azure Data Factory między wykonaniami potoku?

Nov 23 2020

Postępowałem zgodnie z samouczkiem Microsoftu dotyczącym przyrostowego / delta ładowania danych z bazy danych SQL Server.

Używa znaku wodnego (znacznika czasu) do śledzenia zmienionych wierszy od ostatniego razu. Samouczek przechowuje znak wodny w bazie danych Azure SQL przy użyciu działania „Procedura składowana” w potoku, dzięki czemu można go ponownie użyć w następnym wykonaniu.

Wydaje się przesadą posiadanie bazy danych Azure SQL tylko do przechowywania tej niewielkiej ilości metainformacji (moja źródłowa baza danych jest tylko do odczytu). Wolałbym po prostu przechowywać to gdzie indziej na platformie Azure. Może w magazynie blobów lub czymkolwiek.

W skrócie: czy istnieje łatwy sposób na śledzenie tego typu danych, czy też jesteśmy do tego ograniczeni do korzystania z przechowywanych procesów (lub Azure Functions i in.)?

Odpowiedzi

1 JasonWright Nov 24 2020 at 02:46

Natknąłem się na bardzo podobny scenariusz iz tego, co odkryłem, nie można przechowywać żadnych informacji o znaku wodnym w ADF - przynajmniej nie w sposób, do którego można łatwo uzyskać dostęp.

W końcu właśnie utworzyłem podstawową bazę danych Azure SQL warstwy, aby przechowywać informacje o moim znaku wodnym / konfiguracji na serwerze SQL, którego już używałem w moich potokach.

Fajną rzeczą w tym jest to, że kiedy moje rozwiązanie zostało skalowane do wielu jednostek biznesowych, wszystkie z różnymi bazami danych, nadal mogłem zachować informacje o znaku wodnym dla każdej z nich, po prostu dodając kolumnę, która śledzi, dla której BU była ta konkretna informacja o znaku wodnym.

Magazyn obiektów blob jest rzeczywiście tańszą opcją, ale okazało się, że wymaga nieco więcej wysiłku niż zwykłe użycie dodatkowej bazy danych / tabeli w istniejącej bazie danych.

Zgadzam się, że byłoby naprawdę przydatne, gdyby można było zachować mały zestaw danych w samym ADF dla małych elementów konfiguracyjnych - prawdopodobnie dobra sugestia dla firmy Microsoft!

1 SteveZhao Nov 24 2020 at 09:01

Można to osiągnąć za pomocą działania Kopiuj, ale uzyskanie najnowszego znaku wodnego w „LookupOldWaterMarkActivity” jest skomplikowane, tylko w celach informacyjnych.

Ustawienie zbioru danych:

Kopiuj ustawienie czynności:

Zbiór danych źródła i ujścia jest taki sam. Zmień wyrażenie w dodatkowych kolumnach na@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}

Dzięki temu możesz zapisać znak wodny jako kolumnę w pliku .txt. Jednak trudno jest uzyskać najnowszy znak wodny za pomocą funkcji wyszukiwania. Ponieważ wynik „LookupOldWaterMarkActivity” będzie wyglądał następująco:

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

Nazwa klucza jest generowana przez ADF. Jeśli chcesz otrzymać „11/24/2020 08:31:42”, musisz uzyskać liczbę kolumn, a następnie użyć następującego wyrażenia:@activity('LookupOldWaterMarkActivity').output.value[0][Prop_(column count - 1)]

Jak uzyskać najnowszy znak wodny:

  1. użyj działania GetMetadata, aby uzyskać columnCount

  2. użyj tego wyrażenia:@activity('LookupOldWaterMarkActivity').output.value[0][concat('Prop_',string(sub(activity('Get Metadata1').output.columnCount,1)))]