Změna transformace řádků v mapování toku dat

PLATÍ PRO: Azure Data Factory Azure Synapse Analytics

Tip

Vyzkoušejte si službu Data Factory v Microsoft Fabric, řešení pro analýzy typu all-in-one pro podniky. Microsoft Fabric zahrnuje všechno od přesunu dat až po datové vědy, analýzy v reálném čase, business intelligence a vytváření sestav. Přečtěte si, jak začít používat novou zkušební verzi zdarma.

Toky dat jsou k dispozici ve službě Azure Data Factory i v kanálech Azure Synapse. Tento článek se týká mapování toků dat. Pokud s transformacemi začínáte, přečtěte si úvodní článek Transformace dat pomocí mapování toku dat.

Pomocí transformace alter row můžete nastavit zásady vložení, odstranění, aktualizace a upsertování řádků. Jako výrazy můžete přidat podmínky 1:N. Tyto podmínky by měly být zadány v pořadí podle priority, protože každý řádek bude označen zásadou odpovídající prvnímu odpovídajícímu výrazu. Každá z těchto podmínek může vést k vložení řádku (nebo řádků), aktualizaci, odstranění nebo vložení. Alter Row může vytvořit akce DDL a DML pro vaši databázi.

Alter row settings

Transformace změn řádků pracují pouze s databázemi, REST nebo jímky Azure Cosmos DB ve vašem toku dat. Akce, které přiřadíte k řádkům (vložení, aktualizace, odstranění, upsert), nebudou během ladicí relace probíhat. Spuštěním aktivity Execute Tok dat v kanálu proveďte změny zásad řádků v databázových tabulkách.

Poznámka:

Transformace alter row není nutná pro toky dat Change Data Capture, které používají nativní zdroje CDC, jako je SQL Server nebo SAP. V těchto případech ADF automaticky rozpozná značku řádku, takže zásady Alter Row nejsou potřeba.

Zadání výchozí zásady řádku

Vytvořte transformaci alter row a zadejte zásadu řádku s podmínkou true(). Každý řádek, který neodpovídá žádnému z dříve definovaných výrazů, se označí pro zadanou zásadu řádku. Ve výchozím nastavení bude každý řádek, který neodpovídá žádnému podmíněnému výrazu, označen .Insert

Alter row policy

Poznámka:

Chcete-li označit všechny řádky pomocí jedné zásady, můžete vytvořit podmínku pro tuto zásadu a zadat podmínku jako true().

Zobrazení zásad ve verzi Preview dat

Pomocí režimu ladění můžete zobrazit výsledky změn zásad řádků v podokně náhledu dat. Náhled dat transformace alter row nevytváří akce DDL ani DML pro váš cíl.

Alter row policies

Každá změna zásad řádku je reprezentována ikonou, která označuje, jestli dojde k akci vložení, aktualizace, upsertu nebo odstraněné akce. V horní hlavičce se zobrazuje počet řádků ovlivněných jednotlivými zásadami v náhledu.

Povolit změny zásad řádků v jímce

Aby zásady změn řádků fungovaly, musí datový stream zapisovat do databáze nebo jímky Azure Cosmos DB. Na kartě Nastavení ve jímce povolte, které pro danou jímku povolují zásady změn řádků.

Alter row sink

Výchozí chování je povolit pouze vkládání. Chcete-li povolit aktualizace, upserty nebo odstranění, zaškrtněte políčko v jímce odpovídající této podmínce. Pokud jsou povoleny aktualizace, upserty nebo odstranění, musíte určit, které klíčové sloupce v jímce se mají shodovat.

Poznámka:

Pokud vložení, aktualizace nebo upserty upraví schéma cílové tabulky v jímce, tok dat selže. Pokud chcete upravit cílové schéma v databázi, zvolte jako akci tabulky znovu vytvořit tabulku . Tím se vypustí a znovu vytvoří tabulka s novou definicí schématu.

Transformace jímky vyžaduje jeden klíč nebo řadu klíčů pro jedinečnou identifikaci řádků v cílové databázi. U jímek SQL nastavte klíče na kartě nastavení jímky. V případě služby Azure Cosmos DB nastavte klíč oddílu v nastavení a také nastavte systémové pole Služby Azure Cosmos DB v mapování jímky. Pro Službu Azure Cosmos DB je povinné zahrnout systémový sloupec "ID" pro aktualizace, upserty a odstranění.

Slučuje a upsertuje se službou Azure SQL Database a Azure Synapse

Tok dat podporuje sloučení s azure SQL Database a fondem databází Azure Synapse (datový sklad) s možností upsertu.

Můžete ale narazit na scénáře, ve kterých schéma cílové databáze využívalo vlastnost identity klíčových sloupců. Služba vyžaduje, abyste identifikovali klíče, které použijete, aby odpovídaly hodnotám řádků pro aktualizace a upserty. Pokud má ale cílový sloupec nastavenou vlastnost identity a používáte zásadu upsert, cílová databáze neumožňuje zápis do sloupce. Při pokusu o přenesení do distribučního sloupce distribuované tabulky může dorazit také na chyby.

Tady jsou způsoby, jak to opravit:

  1. Přejděte na transformační Nastavení jímky a nastavte "Přeskočit psaní klíčových sloupců". Tím službě sdělíte, že nezapisuje sloupec, který jste vybrali jako hodnotu klíče pro mapování.

  2. Pokud tento klíčový sloupec není sloupec, který způsobuje problém se sloupci identity, můžete použít předzpracování transformace jímky SQL: SET IDENTITY_INSERT tbl_content ON. Potom ji vypněte pomocí vlastnosti SQL následného zpracování: SET IDENTITY_INSERT tbl_content OFF.

  3. V případě případu identity i případu distribučního sloupce můžete logiku přepnout z upsertu na použití samostatné podmínky aktualizace a samostatné podmínky vložení pomocí podmíněné transformace rozdělení. Tímto způsobem můžete nastavit mapování na cestě aktualizace a ignorovat mapování klíčového sloupce.

Skript toku dat

Syntaxe

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

Příklad

Následující příklad je transformace změn řádků s názvem CleanData , která přebírá příchozí datový proud SpecifyUpsertConditions a vytváří tři změny podmínek řádku. V předchozí transformaci se vypočítá pojmenovaný alterRowCondition sloupec, který určuje, zda je řádek vložen, aktualizován nebo odstraněn v databázi. Pokud má hodnota sloupce řetězcovou hodnotu, která odpovídá pravidlu alter row, přiřadí se tato zásada.

V uživatelském rozhraní vypadá tato transformace jako na následujícím obrázku:

Alter row example

Skript toku dat pro tuto transformaci je v následujícím fragmentu kódu:

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

Po transformaci alter row můžete chtít data potopit do cílového úložiště dat.